类模板继承需要注意:

  • 当子类继承父类是一个类模板时,子类在声明的时候,要指定出父类的中 T 的类型;
template<class T>
class Base {
public:
    T m;
};

class Son : public Base<int> { // 必须要知道父类中的 T 的具体类型,才能被子类继承

};

void test() {
    Son s;
}

int main() {
    test();
    return 0;
}
  • 如果不指定,编译器无法给子类分配内存;
  • 如果想灵活指定出父类中 T 的类型,子类也需要变为类模板。
template<class T>
class Base {
public:
    T m;
};

template<class S, class T>
class Son : public Base<T> {
    T ob;
};

void test() {
    Son<int, char> s;
}

int main() {
    test();
    return 0;
}