在沒有繼承成員的情況下迭代結構類的成員

module main;

auto getMemberNames(T)() @safe pure {
    string[] members;
    
    foreach (derived; __traits(derivedMembers, T)) {
        members ~= derived;
    }
    
    return members;
}

class Foo {
    int a;
    int b;
}

class Bar : Foo {
    int c;
    int d;
    int e;
}

void main() {
    import std.stdio;
    
    foreach (member; getMemberNames!Bar) {
        writeln(member);
    }
}

derivedMembers 返回一個字串文字元組,其中每個字串都是成員名稱。

示例輸出:

c
d
e