Is there a way to use Object.factory with templated classes? Or some way to construct templated classes given RTTI of an instance?

Steven Schveighoffer schveiguy at gmail.com
Thu Sep 27 14:23:48 UTC 2018


On 9/27/18 10:20 AM, Steven Schveighoffer wrote:
> typeid sometimes gives you a more derived type than TypeInfo. Including 
> for classes and structs.
> 
> In the past, .classinfo gave you a different thing than typeid(obj), but 
> now it is the same thing:
> 
> 
>      auto obj = new Object;
>      // classinfo and typeid are the same object
>      assert(obj.classinfo is typeid(obj));
>      // and the same type
>      static assert(is(typeof(obj.classinfo) == typeof(typeid(obj))));
> 
> I wouldn't use classinfo any more, I generally use typeid.

I should add that typeid does give you the derived TypeInfo_Class, not 
the concrete one.

that is:

Object obj; // = null

//typeid(obj); // segfault, can't dereference null pointer

class C {}

obj = new C;

static assert(is(typeof(obj) == Object));

writeln(typeid(obj)); // C, not Object

So it really is a drop-in replacement for classinfo. I think classinfo 
is still there to avoid breaking existing code that uses it.

-Steve


More information about the Digitalmars-d-learn mailing list