我想创建一个带有 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;
但这也行不通......有什么想法吗?
最佳答案
我想出了一个解决方案。我创建了一个空的抽象类 IEventHandler 并从该类继承了 EventHandler。然后我制作了一个 IEventHandler* 的映射,它现在似乎工作正常。它可以添加任何类型的 EventHandler。我现在需要找到一种方法来确保 IEventHandler 仅由 EventHandler 继承,并且它只是正确的 T 类型。
2 个小更新: 我使用了 static_cast 来调用 EventHandlers 方法,因为它正在转换为指针,所以没有额外的复制构造函数调用 ^_^ 我通过给它一个私有(private)析构函数和友好的 EventHandler 来限制谁可以从 IEventHandler 派生
关于c++ - 具有通用模板化基类型的 STL 容器,接受派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465847/