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.