How get struct value by member name string ?
Steven Schveighoffer
schveiguy at gmail.com
Fri Jun 2 16:23:37 UTC 2023
On 6/1/23 10:58 PM, John Xu wrote:
> Ok, thanks for all you gentlemen's help. I tried following function,
> now it works like C/C++/Python way:
>
> string getTMember(T t, string columnName) {
> foreach(member; __traits(allMembers, T)){
> if (member == columnName) {
> return __traits(getMember, mcu, member).to!string;
> }
> }
> return "";
> }
>
You can use a switch, and the search for the right member name should be
more optimized, though it's possible the compiler might recognize your
pattern and do this anyway:
```d
string getTMember(T t, string columnName) {
switch(columnName)
{
static foreach(member; __traits(allMembers, T)) {
case member:
return __traits(getMember, t, member).to!string;
}
default:
return "";
}
}
```
This is a very common pattern in e.g. serialization libs in D.
-Steve
More information about the Digitalmars-d-learn
mailing list