【发布时间】:2012-04-03 10:45:41
【问题描述】:
我写了这个小代码
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_;
它显示为错误:
“模板”之前的预期主表达式 |
错误:预期为 ';'在“模板”之前
【问题讨论】:
-
它应该做什么?请注意,模板必须始终在编译时解析。看来您想用它们构建一个多态容器,这是不可能的;你必须为此使用虚拟继承。
-
其实我应该在 map 中存储每种类型的不同类型的消息,所以我尝试通过 "std::map
> 地图_;" (这也不起作用)所以类可以是 message_typeA、message_typeB 等 -
正如我所说,这是不可能的。将
message_typeA、message_typeB派生为messegetype_base的类,然后您可以使用容器,例如std::unique_ptrs 到任何这些对象。它比动态语言(或至少垃圾收集的语言)稍微复杂一些,但它确实有它的好处(编译时类型安全、良好的性能......)。 -
那么我可以用 messagetype_base 创建一个容器,然后在创建我使用 messagetype_base myMsg= new message_typeA() 的对象时??
-
差不多。它必须是一个带有 pointers 到
messagetype_base的容器,出于安全和方便的原因,我推荐std::unique_ptr。
标签: c++ class templates dictionary stl