假设我们有一个模板化的类,
template<typename Type>
class Container {};
当然,我们不能这样做:
struct Foo
{
Container _container;
}
但是,如果我们想做类似的事情怎么办?这是定义基类的唯一方法,
class ContainerBase {};
template<typename Type>
class Container : public ContainerBase {};
并存储一个指针,如下所示?
struct Foo
{
ContainerBase* _container;
}
这很简单,但是仅出于这个原因而不得不添加一个基类,这似乎很奇怪,因为看起来编译器应该具有足够的信息来暗示一组相关的专业知识。当然,无论
_container
需要是一个指针,否则Foo
都无法解析为静态大小,但是struct Foo
{
Container* _container;
}
也不起作用。
最佳答案
似乎编译器应该具有足够的信息来暗示一组相关的专业知识。
不。除了名称,模板的专业化是完全无关的,类型的名称与运行时操作基本上没有关系。给定模板的专业化通常共享(主要是)通用接口,但是它们也可能完全不同。
如果要在各专业之间建立联系,则必须添加基类。如果它们有很多共同点,那么将功能纳入基础是一个不错的主意。
关于c++ - 通过定义基类来“多态”声明非专业模板类型的成员的唯一方法是吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25829404/