先给结论:不要对模版基类做任何假设前提:有如下一个模版类template <typename T>class TBase{ public: void f(){ cout << FUNCTION << endl;}};1.我们都知道 TBase<int> , TBase<char> … 等等实例化的类 互相都没有关系;2.特化本质上就是接管了编译器的工作 ; 比如 template<> class TBase<int>{…} 相当于 接管了编译器去生成TBase<int>;好了.有了以上的前提. 下面进入正题:模版基类引出的问题下面有这么一个类:template <typename T>class TChild : public TBase<T>{ //继承一个模版类 public: void doit(){ f(); //有些编译器能通过,有些则不能 ; 可以 this->f() .跳过编译器当前的检查 }};一般严格的编译器都将编译失败. 原因 : 编译器做了一个假设 TBase 有可能被特化, 被特化的版本中可能并未提供 f 接口;比如:对Tbase<int> 特化template <> //一个空的TBase<int>类class TBase<int>{};int main(int argc, char *argv[]){ TChild<int> t1; t1.doit(); //不严格的编译器得到这里才出错; return 0;}