2

以下簡単にまとめてみたいと思います

class A {
    int a;
    int b;
    int c;
    std::vector<int*> addrs;
public:
    A() : addrs{ &a, &b, &c } {}
};

そのため、フィールドのリストを 2 つの場所、つまり の宣言と初期化子に書き込む必要はありませんaddrs。マクロを使用して宣言を収集し、後で使用する方法はありますか。例えば、

class A {
    VAR_DECL(a);
    VAR_DECL(b);
    VAR_DECL(c);
    std::vector<int*> addrs;
public:
    A() : addrs{ VAR_ADDRESSES } {}
};

文脈上、これはある種のプロパティイントロスペクションシステムを実装することを意図しています。

4

4 に答える 4

0

ユニオンを使用できます:

class A {
    A() {
        static_assert(&u.a == &u.vars[0], "&u.a == &u.vars[0] failed");
        static_assert(&u.b == &u.vars[1], "&u.b == &u.vars[1] failed");
        static_assert(&u.c == &u.vars[2], "&u.c == &u.vars[2] failed");
    }
private:
    union {
        struct {
            int a;
            int b;
            int c;
        };
        int vars[3];
    } u;
};
于 2013-08-28T13:54:45.487 に答える