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