Я написал этот маленький кодПочему использование шаблона в качестве параметра в шаблоне карты STL не поддерживается?
std::map<int,template<class T>> map_;
map_.insert(make_pair<int,message>(myMsg.id,myMsg));
но компилятор не кажется, чтобы получить его и показывает как ошибка
template argument 2 is invalid
и когда я пытался исправить, выполнив эту
template<class T>
std::map<int,T> map_;
он отображается как ошибка:
expected primary-expression before 'template' |
error: expected ';' before 'template'
Что он должен делать? Обратите внимание, что шаблоны всегда должны быть разрешены во время компиляции. Кажется, вы хотите создать с ними полиморфный контейнер, что невозможно; вы должны использовать для этого виртуальное наследование. – leftaroundabout
Ну, на самом деле, я должен хранить разные типы сообщений каждого типа на карте, поэтому я попытался создать глобальную структуру, вызвав ее «std :: map> map_;" (который не работает), поэтому класс может быть message_typeA, message_typeB и т. д. –
Glolita
Как я уже сказал, это невозможно. Создайте 'message_typeA',' message_typeB' производные классы 'messegetype_base', затем вы можете использовать контейнер, например. 'std :: unique_ptr' для любого из этих объектов. Это немного сложнее, чем в динамических языках (или, по крайней мере, собранных из мусора), но имеет свои преимущества (безопасность типа компиляции, хорошая производительность ...). – leftaroundabout