【发布时间】:2010-11-17 16:11:22
【问题描述】:
有这个基本的层次结构:
// header
class Base
{
virtual void method() { }
virtual ~method() { }
};
class Subclass : Base
{
virtual void method() { }
virtual ~method() { }
};
我希望用两个显式变体子类化 Base(如果可能,不必提供 Subclass 的两个实现),因此建议使用显式模板实例化:
// header
class Base
{
virtual void method() { }
virtual ~method() { }
};
class Base1 : public Base { };
class Base2 : public Base { };
template <typename T>
class Subclass : public T
{
virtual void method();
virtual ~method() { }
};
// cpp
template <typename T>
void Subclass<T>::method()
{
}
template class Subclass<Base1>;
template class Subclass<Base2>;
我收到此错误:
“方法”没有参数 取决于模板参数, 所以必须声明“方法” 可用
这是正确的方法吗?我显然必须模板 Base 才能编译,但是用什么?
【问题讨论】:
-
不要忘记虚拟析构函数。与金钱不同,与性不同,你需要索取,否则你得不到。
标签: c++ templates inheritance instantiation