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

Reply via email to