Getting all struct members and values with introspection avoiding string mixins
ParticlePeter via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun May 1 03:40:15 PDT 2016
On Sunday, 1 May 2016 at 10:13:47 UTC, H. S. Teoh wrote:
> On Sun, May 01, 2016 at 09:42:37AM +0000, ParticlePeter via
> Digitalmars-d-learn wrote:
>> I am logging arbitrary POD struct types with member names and
>> data:
>>
>> void printStructInfo( T )( T info ) {
>> foreach( i, A; typeof( T.tupleof )) {
>> enum attribName = T.tupleof[i].stringof;
>> writefln( "%s : %s", attribName, mixin( "info." ~
>> attribName ));
>> }
>> }
>>
>> Is there is some other way to evaluate info.attribName without
>> using string mixins?
> [...]
>
> Using typeof(T.tupleof) seems a bit circuitous. Here's how I'd
> do it:
>
> void printStructInfo( T )( T info ) {
> import std.stdio : writefln;
> foreach (memb; __traits(allMembers, T)) {
> writefln("%s: %s", memb,
> __traits(getMember, info, memb));
> }
> }
>
> (For structs that have members other than data fields, you'll
> need a static if to filter out non-value members, but this
> should get you started.)
>
>
> T
Thanks, I was searching for that!
The given example is a simplification of my code. I do examine
each member separately and treat accordingly, but eventually used
the mixin version to get the build-in type values.
More information about the Digitalmars-d-learn
mailing list