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

Marc jckj33 at gmail.com
Sat Dec 16 15:31:56 UTC 2017


On Saturday, 16 December 2017 at 03:48:01 UTC, Jonathan M Davis 
wrote:
> 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:
>> > [...]
>>
>> then
>>
>> >[...]
>>
>> I get this 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

You're right. I changed to generate code to do it properly at 
runtime, something like this:

> enum string[] members = [__traits(derivedMembers, Field)] [0 .. 
> $ - 1];
>		static foreach(enum string member; members) {
>			doSomething(member, __traits(getMember, fields, member));
		}

Not sure if best approach. note: I know [0 .. $ -1] is probably 
wrong. I'll fix it


More information about the Digitalmars-d-learn mailing list