Карта с именем класса в качестве ключа

Можно ли как-то использовать имя класса в качестве ключа в контейнере?

Я хочу хранить объекты классов, унаследованных от одной базы.

struct storage {};

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

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

У меня есть вложенная карта. ... должен быть заполнен определенным именем класса, как storagetransform или же storageform как тип или строка или что-то еще.

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

Я хочу получить доступ к объекту контейнера, как показано ниже.

list[storagetransform](1337);

Это возможно как-то? Более того, есть ли лучший подход к этой проблеме?

2

Решение

Если вы согласны получить доступ к вашему списку, как это:

list[ type_index ( typeid(classname) ) ]

вы можете использовать std :: type_index для отображения вашего класса на индексируемый (используемый в std :: map и т. п.) объект, и вы можете объявить вашу std :: map следующим образом

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

Насколько я помню, для этого нужен компилятор, который соответствует новому стандарту C ++.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]