Можно ли как-то использовать имя класса в качестве ключа в контейнере?
Я хочу хранить объекты классов, унаследованных от одной базы.
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);
Это возможно как-то? Более того, есть ли лучший подход к этой проблеме?
Если вы согласны получить доступ к вашему списку, как это:
list[ type_index ( typeid(classname) ) ]
вы можете использовать std :: type_index для отображения вашего класса на индексируемый (используемый в std :: map и т. п.) объект, и вы можете объявить вашу std :: map следующим образом
std::map< std::type_index , ... > list;
Насколько я помню, для этого нужен компилятор, который соответствует новому стандарту C ++.
Других решений пока нет …