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 > > > > <charleshi...@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