Introspection/Reflection/etc on Linux
Jacob Carlborg
doob at me.com
Wed Oct 19 01:21:19 PDT 2011
On 2011-10-18 18:48, J Arrizza wrote:
> I'm trying to write some sample code to:
> 1 create an object via it's name
> 2 search an object for it's functions
> 3 call a static function in a class
> 4 call a non-static function in an object
>
> #1, #2 and #3 were straightforward. But #4 looks like it's not possible
> in DMD 2.0.
>
> I found this:
>
> http://www.digitalmars.com/d/archives/digitalmars/D/announce/Runtime_reflection_9949.html
>
> which implies #4 is doable in Windows but not Linux. I'm using Linux
> 64-bit Ubuntu.
>
> Any other avenues I can chase?
>
> TIA,
> John
How about doing something like this:
class Foo
{
void bar ()
{
writeln("bar");
}
}
void main ()
{
auto foo = new Foo;
auto members = __traits(derivedMembers, Foo);
void delegate () dg;
foreach (i, m ; members)
if (m == "bar")
dg.funcptr = cast(void function()) foo.classinfo.vtbl[i + 6];
dg.ptr = cast(void*) foo;
dg();
}
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list