c++ - 我们可以在 C++ 中使用 "wrap"模板类和非模板类吗?

标签 c++ c++11 templates

免责声明:恐怕对我的问题的简短回答是“不可能”。但由于我不是 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/

相关文章:

c++ - 在其他类中实现类似 std::array 的构造函数

c++ - 在函数声明和定义中使用 noexcept 说明符?

c++ - 在线程池类中将函数指针作为函数模板发送

c++ - 为什么 C++ 实例化一个被完全特化掩盖的基本模板函数?

c++ - 在 qt 应用程序内执行 qt 应用程序

c++ - OpenMPI MPI_Gather 段错误或断言错误

javascript - Handlebars.js 不将 unicode 处理为 JSON 的键?

c++ - 将异常转换为可选的 : cant resolve overloaded function type

c++ - 具有自定义顶点属性的图的 boost 支配树

c++ - Windows Phone 的 RegistryNotifyCallback 等效项