免责声明:恐怕对我的问题的简短回答是“不可能”。但由于我不是 C++ 专家,我想我还是试一试并在这里询问,也许有某种我不知道的解决方案。
所以我有类似容器的模板类 MyContainer
在内部将数据存储在 std::list<T>
中, 其中T
是类模板类型。这很好用。
现在我想添加另一个类,它必须在 std::map<std::string, MyContainer>
中映射该模板化容器类的实例。 .但是,编译器要求我为映射的值部分提供模板类类型,如 std::map<std::string, MyContainer<T>>
中所示。 .但我宁愿在这里省略这个模板,因为这反过来又要求我也为包装类使用模板。
因此我的问题是:有没有一种方法可以实现我想要做的事情,至少在某种程度上省略了包装类的模板类型?或者这在 C++ 中是不可能的,因为编译器在任何情况下都需要该信息?
最佳答案
执行此操作的一种常用技术是继承。
你做MyContainer<T>
继承自一些基类,例如 MyBaseContainer
. MyBaseContainer
不是模板类,而是MyContainer
是。 MyBaseContainer
类具有模板化类覆盖的虚函数。
然后,您制作类型为 std::map<std::string, MyBaseContainer*>
的 map .它将能够调用它存储的容器上的虚函数,而不必知道每个容器的模板类型。
这就是std::function
有效。
关于c++ - 我们可以在 C++ 中使用 "wrap"模板类和非模板类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954138/