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).完成了继承与虚函数可以实现的功能.
还有一个明显的优点,那就是省去虚表结构.小的类也许虚表结构不大,但是大的类或者由于多次继承产生的虚表膨胀就会占去很大的空间.而且虚表采用晚绑定方式,在性能上就会有一定下降.而采用这种方式,在空间与时间都有很多提高。(我想是这样,不过没测试过)
先看代码:
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).完成了继承与虚函数可以实现的功能.
还有一个明显的优点,那就是省去虚表结构.小的类也许虚表结构不大,但是大的类或者由于多次继承产生的虚表膨胀就会占去很大的空间.而且虚表采用晚绑定方式,在性能上就会有一定下降.而采用这种方式,在空间与时间都有很多提高。(我想是这样,不过没测试过)
相关文章推荐
- C++模板--ATL利用其实现多态
- C++模板使用介绍
- C++中 模板Template的使用
- 利用c++模板实现快速排序
- C++中的模板技术
- C++实现顺序栈,运用模板,界面友好,操作方便,运行流畅
- STL学习小记--与C++模板相关的几个特性
- C++中的模板(template)
- C++模板实现二叉树(七 AVL树的删除)
- STL运用的C++技术(1)——成员模板
- C++中 模板Template的使用
- C++基础——模板的0初始化
- c++ 树模板
- C++模板机制
- WTL也发布了最新版,提供了一些vista界面的模板,对c++程序员有一个好消息!
- C++数据结构 乱搭配模板迭代
- C++学习------模板
- C++中的函数重载与模板
- c++模板
- C++ 模板类型推导过程中的隐式类型转换