www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Introspection

reply Sean Kelly <sean invisibleduck.org> writes:
Does anyone know a way to determine the type and offset of class/struct members?
It seems we already have all the necessary pieces, but I haven't been able to
get it
to work thus far.  What I'm thinking of is something like this:

    import std.stdio;

    class C
    {
        int i;
        void* p;
    }

    void main()
    {
        foreach( e; typeof(C.tupleof) )
            writefln( e.stringof, " ", e.offsetof );
    }

However, offsetof doesn't appear to work on the members of this
TypeTuple, nor on an instance tuple.  I've also tried various attempts
at printing the address or value of the instance tuple, with no success.


Sean
Sep 23 2008
next sibling parent reply BCS <ao pathlink.com> writes:
Reply to Sean,

 Does anyone know a way to determine the type and offset of
 class/struct members?
 It seems we already have all the necessary pieces, but I haven't been
 able to get it
 to work thus far.  What I'm thinking of is something like this:
 import std.stdio;
 
 class C
 {
 int i;
 void* p;
 }
 void main()
 {
 foreach( e; typeof(C.tupleof) )
 writefln( e.stringof, " ", e.offsetof );
 }
 However, offsetof doesn't appear to work on the members of this
 TypeTuple, nor on an instance tuple.  I've also tried various attempts
 at printing the address or value of the instance tuple, with no
 success.
 
 Sean
 

import std.stdio; class C { int i; void* p; } void main() { C c = new C; foreach( i,e; c.tupleof ) writefln( typeof(e).stringof, " ", c.tupleof[i].offsetof ); }
Sep 23 2008
parent reply BCS <ao pathlink.com> writes:
Reply to Benjamin,

 Reply to Sean,
 
 Does anyone know a way to determine the type and offset of
 class/struct members?
 It seems we already have all the necessary pieces, but I haven't been
 able to get it
 to work thus far.  What I'm thinking of is something like this:
 import std.stdio;
 class C
 {
 int i;
 void* p;
 }
 void main()
 {
 foreach( e; typeof(C.tupleof) )
 writefln( e.stringof, " ", e.offsetof );
 }
 However, offsetof doesn't appear to work on the members of this
 TypeTuple, nor on an instance tuple.  I've also tried various
 attempts
 at printing the address or value of the instance tuple, with no
 success.
 Sean
 


cleaner: import std.stdio; class C { int i; void* p; } void main() { foreach( i,e; typeof(C.tupleof) ) writefln( e.stringof, " ", C.tupleof[i].offsetof ); }
Sep 23 2008
parent Sean Kelly <sean invisibleduck.org> writes:
== Quote from BCS (ao pathlink.com)'s article
 Reply to Benjamin,
 Reply to Sean,

 Does anyone know a way to determine the type and offset of
 class/struct members?
 It seems we already have all the necessary pieces, but I haven't been
 able to get it
 to work thus far.  What I'm thinking of is something like this:
 import std.stdio;
 class C
 {
 int i;
 void* p;
 }
 void main()
 {
 foreach( e; typeof(C.tupleof) )
 writefln( e.stringof, " ", e.offsetof );
 }
 However, offsetof doesn't appear to work on the members of this
 TypeTuple, nor on an instance tuple.  I've also tried various
 attempts
 at printing the address or value of the instance tuple, with no
 success.
 Sean


import std.stdio; class C { int i; void* p; } void main() { foreach( i,e; typeof(C.tupleof) ) writefln( e.stringof, " ", C.tupleof[i].offsetof ); }

Huh, e.offsetof doesn't work but C.tupleof[i].offsetof does. At least I was close :-) Thanks! Sean
Sep 23 2008
prev sibling parent Sean Kelly <sean invisibleduck.org> writes:
== Quote from Sean Kelly (sean invisibleduck.org)'s article
 Does anyone know a way to determine the type and offset of class/struct
members?
 It seems we already have all the necessary pieces, but I haven't been able to
get it
 to work thus far.  What I'm thinking of is something like this:
     import std.stdio;
     class C
     {
         int i;
         void* p;
     }
     void main()
     {
         foreach( e; typeof(C.tupleof) )
             writefln( e.stringof, " ", e.offsetof );
     }
 However, offsetof doesn't appear to work on the members of this
 TypeTuple, nor on an instance tuple.  I've also tried various attempts
 at printing the address or value of the instance tuple, with no success.

Hm, now that I think about it, I bet this is possible with string mixins and __traits. Sean
Sep 23 2008