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