Introspection/Reflection/etc on Linux

Jacob Carlborg doob at me.com
Wed Oct 19 02:30:58 PDT 2011


On 2011-10-19 11:24, J Arrizza wrote:
> Just noticed an odd thing when I was trying Jacob's code.
>
> This works great:
>      auto x = new someClass();
>      Object o = x;
>      void delegate() dg;
>      foreach(i, m; __traits(derivedMembers, someClass))
>        {
>          writeln("i=", i, "  m=", m);
>
>          if(m != "__ctor")
>            {
>              dg.funcptr = cast(void function()) o.classinfo.vtbl[i + 6];
>              dg.ptr = cast(void*) o;
>              dg();
>            }
>        }
>
> but this doesn't (it segfaults):
>      Object o = Object.factory("someClass");
>      void delegate() dg;
>      foreach(i, m; __traits(derivedMembers, someClass))
>        {
>          writeln("i=", i, "  m=", m);
>
>          if(m != "__ctor")
>            {
>              dg.funcptr = cast(void function()) o.classinfo.vtbl[i + 6];
>              dg.ptr = cast(void*) o;
>              dg();
>            }
>        }
>
>
> Is the object returned by Object.factory() not the same somehow as the
> one returned by new()?
>
> John
>

For Object.factory you need the fully qualified name, i.e. 
SomeClass.classinfo.name. If Object.factory can't find a class name it 
will just return null.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list