我想用Base类型的EventHandler创建一个映射,但是在这个映射中插入几个派生的EventHandler,如:
std::unordered_map<int, EventHandler<Base>*> maap;
EventHandler<Derived>* e1 = new EventHandler<Derived>();
maap.emplace(std::make_pair(1, e1));
这可以使用简单对象的指针,但在这里,EventHandler&lt;&gt;是一个模板化的对象,所以编译器正在忙于转换。 如果我可以做像
那样的事情会很好template <class T>
std::unordered_map<int, EventHandler<T>> maap;
但那也不起作用......有什么想法吗?
答案 0 :(得分:1)
我想出了一个解决方案。我创建了一个空的抽象类IEventHandler并从该类继承了EventHandler。然后我制作一个IEventHandler *的地图,它似乎现在正常工作。它可以添加任何类型的EventHandler。我现在需要找到一种方法来确保IEventHandler仅由EventHandler继承,并且它只是正确的T类型。
2个小更新: 我使用static_cast来调用EventHandlers方法,因为它正在转换为指针,所以没有额外的复制构造函数^ _ ^ 我限制谁可以从IEventHandler派生出来,给它一个私有析构函数和友情链接EventHandler