基本クラスと、各派生クラスが独自の一意の識別子を持つ N 個の派生クラスのセットを作成しようとしています。ここでは、単純な「手動」実装を示します。
struct Base {
static int id_ = 0;
};
struct Derived1 : public Base {
static int id_ = 1;
};
struct Derived2 : public Base {
static int id_ = 2;
};
問題は、派生クラスを追加し続けたい場合、既存の派生クラスの数を数えなければならないことです。
ビットセットを使用して一意の ID を表現したいので、事態はさらに複雑になります。すべての派生クラスの一意の ID が基本的に、1 に設定された (共通長ビットセットの) 異なるビットである場合、派生クラスのグループに対してバイナリ AND/OR/XOR/etc 操作を実行するのが非常に簡単になります。
以下は、私が望むものの不完全で間違った実装です
//Let DCOUNT be the number of derived classes, Ideally I shouldnt have to ever
//know/think about what it evaluates too, it should be automatic.
//But that is second priority, I would be willing to #define this to
//some 'large' value, and not worry about it.
struct Base {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00000"
};
struct Derived1 {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00001"
};
struct Derived2 {
static std::bitset<DCOUNT> id_ = generateUniqueID(); // "00010"
};
これを実装する最良の方法は何ですか? (またはそのようなもの)