2

クラス名をコンテナのキーとして何らかの方法で使用することは可能ですか?

同じベースから継承されたクラスのオブジェクトを格納したい。

struct storage {};

struct storagetransform : public storage
{
    vec3 position, rotation;
};

struct storageform : public storage
{
    unsigned int vertex, texture;
};

ネストされたマップがあります。には、タイプや文字列など...の特定のクラス名を入力する必要があります。storagetransformstorageform

unordered_map<..., unordered_map<int, storage*> > list;

以下のようにコンテナのオブジェクトにアクセスしたい。

list[storagetransform](1337);

これはどういうわけか可能ですか?さらに、この問題に対するより良いアプローチはありますか?

4

1 に答える 1

3

次のようにリストへのアクセスを許可する場合:

list[ type_index ( typeid(classname) ) ]

std::type_index を使用して、クラスをインデックス可能な (std::map などで使用可能な) オブジェクトにマップし、次のように std::map を宣言できます。

std::map< std::type_index , ... > list;

私が覚えている限りでは、これには新しい C++ 標準に準拠したコンパイラが必要です。

于 2012-12-16T10:59:49.687 に答える