如何完成以下建议?:
template<typename T>
class Base{...};
...
class Derived : public Base<int>{...};
答案 0 :(得分:5)
是的,这是合法的。
Base
是一个类模板,当提供它的所有模板参数时,它可以被实例化,这使它成为一个实例化的类。所以Base<int>
是一个类名,你可以继承它。
答案 1 :(得分:1)
看起来不错。
答案 2 :(得分:1)
这个称为静态继承的特定习惯用法。
template<typename T> class Base {
void MyStaticVirtualFunction() { T::MSVF(); }
};
class Derived : public Base<Derived> {
void MSVF();
};
在这种情况下,Base在编译时充当基类,并且静态解析函数调用,但Base的行为仍然可以变化。