从模板继承的C ++语法/合法性,同时还指定类型

时间:2010-07-13 19:25:11

标签: c++

如何完成以下建议?:

template<typename T>
class Base{...};
...
class Derived : public Base<int>{...};

3 个答案:

答案 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的行为仍然可以变化。