您现在的位置是:主页 > news > 邯郸建设网站的公司/百度地图导航手机版免费下载

邯郸建设网站的公司/百度地图导航手机版免费下载

admin2025/6/5 1:10:49news

简介邯郸建设网站的公司,百度地图导航手机版免费下载,网站建设合同包含什么,柳州做网站价格先给结论:不要对模版基类做任何假设 前提:有如下一个模版类 template <typename T> class TBase{public:void f(){ cout << __FUNCTION__ << endl;} }; 1.我们都知道 TBase<int> , TBase<char> ... 等等实例化的类 互相都没有关系;2.特化本质上就…

邯郸建设网站的公司,百度地图导航手机版免费下载,网站建设合同包含什么,柳州做网站价格先给结论:不要对模版基类做任何假设 前提:有如下一个模版类 template <typename T> class TBase{public:void f(){ cout << __FUNCTION__ << endl;} }; 1.我们都知道 TBase<int> , TBase<char> ... 等等实例化的类 互相都没有关系;2.特化本质上就…

先给结论:不要对模版基类做任何假设

前提:
有如下一个模版类

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;
}