【发布时间】:2016-04-07 02:48:41
【问题描述】:
我想创建一个带有 Base 类型的 EventHandler 的地图,但在该地图中插入几个派生的 EventHandler,如下所示:
std::unordered_map<int, EventHandler<Base>*> maap;
EventHandler<Derived>* e1 = new EventHandler<Derived>();
maap.emplace(std::make_pair(1, e1));
这对于简单对象的指针来说是可能的,但是在这里,EventHandler 是一个模板化的对象,所以编译器正在忙于转换。 如果我能做类似的事情就好了
template <class T>
std::unordered_map<int, EventHandler<T>> maap;
但这也不起作用......有什么想法吗?
【问题讨论】:
-
我想到的唯一选择是编写一个可以容纳所有 EventHandler 类型并使用映射的变体类。例如。你可以为此使用 boost 变体
标签: c++ templates generics unordered-map derived