使用抽象类的子类专门化模板
Specialize template with a subclass of an abstract class
我遇到了以下问题:
我有一个带有模板T
的类Test
.当我创建此类的对象时,专门用于其他公共类,一切正常。在类 Test
的构造函数中,有一行代码用于创建模板类的对象;
但是当我尝试实例化这个类(Test
(,用抽象类(Dummy
(的子类(SubDummy
(专门化它时,我得到一个错误:无法实例化抽象类。
示例代码(简化为本文的目的(:
class Dummy
{
private:
virtual void _nothing() = 0; // this makes the class abstract
};
class SubDummy : public Dummy
{
public:
SubDummy() :
Dummy()
{
}
};
template <class T>
class Test
{
public:
Test()
{
T t; // here the compiler reports the error
}
};
int main()
{
Test<SubDummy> x;
}
包含纯虚拟成员函数的类根本无法实例化。由于您没有在SubDummy
中指定_nothing
的覆盖,因此它在此类中也是纯虚拟的。您必须在SubDummy
中实现_nothing
才能使其正常工作。
有时,在调试模板时,考虑使用变量实例化类时类变成什么很有用。
class TestWithSubDummy {
public:
TestWithSubDummy() {
SubDummy t;//the error
}
};
很明显,您正在尝试在错误处实例化SubDummy
(使用默认构造函数(。但是SubDummy
是抽象的,所以我们不允许实例化它。因此,错误。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 使用抽象类的子类专门化模板
- 所有子类的模板专门化
- 如何在子类中重载模板化函数(专门化)