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