クラスBase
とクラスDerived_1
,... IDを持つには派生クラスが必要です。これらのIDは、さらなるルックアップなどに使用されるため、連続する必要があります(乱数だけではありません)。派生クラスはユーザーによって作成されるため、IDはDerived_N
のメンバーになることはできません。だから私はDerivedType
クラスを思いついた。データ型(クラス型)をキーとしてキーとして使用
class DerivedType
{
static unsigned id;
unsigned m_id;
public:
DerivedType() : m_id(id++) { }
}
は今、私はDerived_N
とDerivedType
との間のマッピングを作成します。 Derived_N
が作成されるたびに、このマッピングは、Derived_N
のDerivedType
がすでに存在するかどうかを調べてそれを返します。そうでない場合は、新しいマップを作成してマップに保存します。
実際の質問: マップでキーとしてデータ型でstd::map
を使用する方法はありますか? 私はテンプレート - メタプログラムソリューションを恐れていません。 または私の目標を達成するためのエレガントな方法はありますか? -
編集 Date型>データ型、私が意味するClassTypeのように、私は私が好きな、それを使用したい
:)申し訳ありません:
Derived_5 d;
DerivedType dt = getType(d); //Derived_5 is looked up in map, returning particular DerivedType
dt.getId();
Derived_N
のすべてのインスタンス(同じで " N ')DerivedType
EDIT2 throu同じIDを持っている必要があります - 私の答え 私はそれは、Liである...私の問題のためのよりよい解決策を見つけましたKEこの:
atomic_counter s_nextEventClassID;
typedef int cid_t;
template<class EventClass>
class EventClassID
{
public:
static cid_t getID()
{
static cid_t classID = EventClassID::next();
return classID;
}
static cid_t next() { return ++s_nextEventClassID; }
};
私の質問は、マップ内のデータ型を使用する方法だったので、私はあなたに感謝し、あなたの答えの一部をマークします
これは受け入れられる回答である必要があります – jupp0r
最新のC++を使用する非常に良い答え – Anonymous