defining "in" What is the proper way in D2?

Jonathan M Davis jmdavisProg at gmx.com
Sun Sep 11 14:12:24 PDT 2011


On Sunday, September 11, 2011 14:00:55 Charles Hixson wrote:
> On 09/11/2011 01:25 PM, Vladimir Panteleev wrote:
> > On Sun, 11 Sep 2011 23:02:37 +0300, Charles Hixson
> > 
> > <charleshixsn at earthlink.net> wrote:
> >> I can't figure it out from
> >> http://www.digitalmars.com/d/2.0/operatoroverloading.html#Binary
> > 
> > // I assume your data structure looks like this
> > class Node(Key, Data)
> > {
> > Key k;
> > Node!(Key, Data) left, right;
> > int level;
> > // ...
> > 
> > void opBinary!("in")(Key k)
> > {
> > if (level == 0) return false;
> > if (k < key) return k in left;
> > if (key < k) return k in right;
> > return true;
> > }
> > }
> 
> VOID??  I'm going to presume that this should have been bool.
> Otherwise, thanks.  That was they syntax I couldn't figure out from the
> docs.
> 
> And, yeah.  That's what it looks like.  My find code was wrong, because
> it should have referenced the node, so what I need to do is move the cod
> into the node class.  But it was the syntax of defining the opBinary
> specialization that was hanging me up.  (For some reason I have a hard
> time wrapping my mind around template code.)

The "in" operator normally returns a pointer to the value that you're trying 
to find (and returns null if it's not there). Making it return bool may work, 
but it's going to be a problem for generic code. That's like making 
opBinary!"*" return a type different than the types being multiplied. It's just 
not how the operator is supposed to be used and could cause problems.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list