C++ Templates 的一个例子

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

C++ Templates <The complete guide> 中的一个例子:

一个模板基类

template<class T>

class Base

{

public:

int field; // #1

};

派生类, 从上面的模板基类继承

注意, 在此, 基类并不能确定就是上面的Base<T>,

因为 下面#3 处可以看到, 程序对Base<int>进行了特化

template<class T>

class Derived : public Base<T>

{

public:

void f()

{

field++; //#2 哪个field? #1处还是#3处,

}

};

#2处的field到底是char还是int类型? 即#1处还是#3处 ? 显然无法确定, 只有当

Derived被某个特定的T类型实例化的时候才知道.

template<>

class Base<int>

{

public:

char field; //#3

};

#2处的field是一个non-dependent name, 而基类Base<T>是一个dependent name, 因此不去其中查找.

正确的编译器做法是: 在#1处报错. VC7.1就是如此.

因此在Derived<T>模板类中, 如果确实需要指定Base<T>中的field, 应该使用 this->field 或者 Base<T>::field.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航