| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
September 23, 2008 Introspection | ||||
|---|---|---|---|---|
| ||||
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
| ||||
September 23, 2008 Re: Introspection | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | 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 );
}
| |||
September 23, 2008 Re: Introspection | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sean Kelly | == 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
| |||
September 23, 2008 Re: Introspection | ||||
|---|---|---|---|---|
| ||||
Posted in reply to BCS | 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 );
}
| |||
September 23, 2008 Re: Introspection | ||||
|---|---|---|---|---|
| ||||
Posted in reply to BCS | == 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
> >>
> 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 );
> }
Huh, e.offsetof doesn't work but C.tupleof[i].offsetof does. At least I was close :-) Thanks!
Sean
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply