サーチ…


構文

  • __traits(TraitsKeyword、TraitsArguments ...)

構造体のメンバーを反復する

import std.stdio;

struct A {
    int b;
    void c();
    string d;
};

void main() {
    // The following foreach is unrolled in compile time
    foreach(name; __traits(allMembers, A)) {
        pragma(msg, name);
    }
}

allMembers特性は、指定された型のメンバの名前を含む文字列のタプルを返します。これらの文字列はコンパイル時に認識されます。

継承されたメンバーなしで構造体/クラスのメンバーを反復処理する

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow