Is there other way to do that?

Rumbu rumbu at rumbu.ro
Mon Feb 15 11:39:46 UTC 2021


On Monday, 15 February 2021 at 07:26:56 UTC, Jack wrote:
> I need to check if an instance is of a specific type derived 
> from my base class but this class has template parameter and 
> this type isn't available at time I'm checking it. Something 
> like:
>
> class B { }
> class A(T) : B { }
> class X : B { }
> class Z : B { }
>
> auto c = can be any derived class from B
> bool isX = cast(A!???) c !is null;
> assert(isX);
>
> an interface would work:
>
> interface IA { }
> class A(T) : B, IA { }
>
> bool isX = cast(IA) c !is null;
> assert(isX);
>
> but I would have create one just for that. It feels a bit 
> hacky? also, does an empty interface like that increase the A 
> class memory size at all?

Hackier than hack:

bool isA(Object o)
{
     return o && (cast(TypeInfo_Class)(typeid(o))).name == "A";
}

Of course, this is not recommended, I am sure that there is 
another way to achieve what you want but with other design. 
Unfortunately, your examples are too limited to have an idea.



More information about the Digitalmars-d-learn mailing list