您的位置:首页 > 编程语言 > C语言/C++

ATL中的C++模板

2009-01-13 00:33 176 查看
在ATL的类库中,存在大量的C++模板,特化,偏特化,还是一种模板---基类模板(姑且这么叫吧),可能是平时不多见,在ATL中却是漫山遍野,几乎每一个类都采用了这种实现方式.

先看代码:

Code

class CBase{

public:

virtual void Methord(){

std::cout<<"CBase"<<std::endl;

}

};

template<typename T>

class Drived:public T{

public:

void CallMethord(){

T *aT = static_cast<T*>(this);

aT->Methord();

}

void Methord(){

std::cout<<"Drived"<<std::endl;

}

};

int _tmain(int argc, _TCHAR* argv[])

{

Drived<CBase> d;

d.CallMethord();

return 0;

}

从运行结果上可以看出.它不仅可以调用基类函数,而且实现了函数重写(override).完成了继承与虚函数可以实现的功能.

还有一个明显的优点,那就是省去虚表结构.小的类也许虚表结构不大,但是大的类或者由于多次继承产生的虚表膨胀就会占去很大的空间.而且虚表采用晚绑定方式,在性能上就会有一定下降.而采用这种方式,在空间与时间都有很多提高。(我想是这样,不过没测试过)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: