On Tuesday, 10 June 2014 at 17:29:35 UTC, Dicebot wrote:
On Tuesday, 10 June 2014 at 16:10:09 UTC, Nordlöw wrote:
Is there a way to iterate over the symbolic names of the data members of a class instance?

I'm currently using .tupleof to get its values (and in turn types) to implement pretty printing to multiple backends (currently testing HTML) using as much of D's compile time reflection as possible:

https://github.com/nordlow/justd/blob/master/pprint.d

I've currently defined mappings from InputRanges of Aggregates (tuples, structs, and classes) to HTML tables where

- the aggregate members are mapped to table columns (and their types in turn two column headers) and
- range elements to rows

and I would like to perfect the output by also propagating the member names to the column headings.

I'm aware of __traits(allMembers, Type) but those return more than .tupleof does.

Help please.

I am not sure I understand the question. Does this help?

struct A
{
        int x;
        double y;
}

void main()
{
        foreach (idx, elem; A.init.tupleof)
        {
                pragma(msg, __traits(identifier, A.tupleof[idx]));
        }
}

// output:
// x
// y

Notice that A.init.tupleof segfaults for classes so that is _not_ an adviced solution in a generic solution!

But fortunately I always have an instance, say a, of A available in the pprint functions so I just use a.tupleof instead! Now it works!

I'll update pprint.d later today! I'll further extract away the dumb dependencies for pprint.d in the upcoming days so it can be reused later on.

Thanks you all!

Reply via email to