how do I read a class member's value using traits?

Jonathan M Davis newsgroup.d at jmdavisprog.com
Sat Dec 16 03:48:01 UTC 2017


On Saturday, December 16, 2017 03:34:43 Marc via Digitalmars-d-learn wrote:
> I need to give a class C, read all user-defined members of it,
>
> both name and value dynamically. for example:
> > class C {
> >
> >   string a;
> >   string b;
> >   string c;
> >
> > }
>
> then
>
> > Class c = new C();
> > // set c members...
> > enum string[] members = [__traits(allMembers, C)];
> > foreach(string member; members) {
> >
> > string value = __traits(getMember, c, member);
> > doSomething(member, value);
> >
> >}
>
> I get this error:
> > Error: variable member cannot be read at compile time
> > Error: string expected as second argument of __traits
> > `getMember` instead of `__error`
>
> why can't member in foreach(string member; members) be read at
> compile time? I've also tried

You're trying to read a runtime value at compile time, and that's not going
to work. c doesn't exist until runtime, so none of its members exist until
runtime. You can introspect on the type C, but the variable c is a runtime
entity.

- Jonathan M Davis



More information about the Digitalmars-d-learn mailing list