Need way to compare classes, and primitive types in bst Template

Mark via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 9 07:08:54 PDT 2017


On Friday, 9 June 2017 at 05:53:11 UTC, ag0aep6g wrote:
...
> Get rid of `real val;` and just compare `payload`s. For 
> classes, you can detect them with `static if (is(T == class))` 
> or some such, and cast to void* when comparing.
>
> But when you cast to void*, you're ignoring an opEquals or 
> opCmp the class might have. That might be surprising. So maybe 
> just require that classes implement opCmp. Or try to detect 
> when a class doesn't have opCmp and only cast then.


Possibly. but I can't use those methods on primitive types. Also, 
I tried implementing a internal method to determine if it is a 
class, or primitive, and compare based off of mem location, or 
actual value.

For some reason, the compiler didn't care, telling me that I 
can't just compare two classes with < or > operators, even though 
I thought I seperated that code out for primitives only.

This is why I'm converting the addresses to real numbers. Which 
means that I have to do the same to the primitive types. I also 
tried using 2 different constructors, with the idea of doing all 
that casting stuff in there. But that didn't bode well with the 
compiler. It didn't know which one to use, as both are entering 
as type T.

I then tried to implement a typeid check, I thought that would 
work, but even though I had said if typeid.toString() was in 
["int", "float", ... ] call primitive func, else call class func, 
the compiler complained that I can't throw classes into the logic 
of the first function. Which wasn't even possible, because it 
wouldn't pass the type check that I made.


Also, I don't want to require that classes implement an opEquals. 
I want to use this with other people's classes, as well as 
built-in classes. That would cause problems.

And it wouldn't bypass the whole primitives/class-struct problem.

Thanks though.

Maybe Ill just go with my inheritance idea, and have one for 
primitives, and one for classes.


More information about the Digitalmars-d-learn mailing list