www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to compare two types?

reply "MarisaLovesUsAll" <marisalovesusall gmail.com> writes:
How to compare two types? Will I use T.stringof instead of this?

void main()
{
	if(One is Two) {} //Error: type One is not an expression
                           //Error: type Two is not an expression
}

class One {}
class Two {}

Regards,
MarisaLovesUsAll
Aug 31 2014
next sibling parent reply "Adam D. Ruppe" <destructionator gmail.com> writes:
There's two ways:

static if(is(One == Two)) {

}


That compares the static types in a form of conditional 
compilation. http://dlang.org/expression.html#IsExpression

If you want to compare the runtime type of a class object, you 
can do:

if(typeid(obj_one) == typeid(obj_two))

that should tell you if they are the same dynamic class type.
Aug 31 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Adam D. Ruppe:

 If you want to compare the runtime type of a class object, you 
 can do:

 if(typeid(obj_one) == typeid(obj_two))

 that should tell you if they are the same dynamic class type.
And what about: if (is(typeof(obj_one) == typeof(obj_two))) Bye, bearophile
Aug 31 2014
parent reply "Adam D. Ruppe" <destructionator gmail.com> writes:
On Sunday, 31 August 2014 at 23:53:31 UTC, bearophile wrote:
 if (is(typeof(obj_one) == typeof(obj_two)))
You could, but since it is static info you might as well use static if.
Aug 31 2014
parent "Adam D. Ruppe" <destructionator gmail.com> writes:
typeof() always gets the static type, typeid() is needed if you
want the dynamic type.
Aug 31 2014
prev sibling parent "MarisaLovesUsAll" <marisalovesusall gmail.com> writes:
Thanks for the answers!
Sep 01 2014