将类的任何模板存储在另一个类中
Posted
技术标签:
【中文标题】将类的任何模板存储在另一个类中【英文标题】:Store any template of class in another class 【发布时间】:2018-06-01 13:17:59 【问题描述】:如果您想将任何模板化类存储在另一个类中,有没有一种方法可以在不扩展非模板化基类的情况下做到这一点。示例
类定义:
class BaseA
...
class Storage
public:
baseA* toStore;//pointer to baseA
template <typename... Type>
class ExtendedA : public baseA
...
使用类:
Storage a;
one.toStore = ExtendedA<int, char, etc...>();
这是我能想到的将模板类型存储在非模板类中的唯一方法。还有其他方法吗?
【问题讨论】:
请注意,ExtendedA<int, char, etc...>
既不是模板也不是您所说的模板类型,它只是一种类型。一般来说,你不能对模板的实例做任何事情,除非你实例化模板,然后它是一个与任何其他类型一样的类型
可能重复:***.com/questions/50642933/…
@user463035818 - 是的,我知道它只是实例化后的一种类型。我只是好奇是否有一些 c++ 语法允许指向“通用”模板类型的指针
@Donut 考虑到由于显式特化等特性,不同的模板特化在界面上可能会有很大差异。没有办法将这种通用模板指针类型用于任何有用的东西,因为它不知道指向的对象提供什么接口。实际上,这样的指针不会比void*
有用。
@Donut 虽然没有内置的指针类型来做你想做的事情,但有一些使用标准库类型的解决方法。请参阅 NathanOliver 链接的建议副本。
【参考方案1】:
在模板未知的情况下,存储和使用模板化类型的唯一方法是以与问题示例相同的方式设置类。
有一个非模板基类。 扩展该基类,并将扩展模板化。 现在可以存储和使用指向基类的指针,即使它恰好是模板扩展类。
【讨论】:
以上是关于将类的任何模板存储在另一个类中的主要内容,如果未能解决你的问题,请参考以下文章