ATL中的C++模板
生活随笔
收集整理的這篇文章主要介紹了
ATL中的C++模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在ATL的類庫中,存在大量的C++模板,特化,偏特化,還是一種模板---基類模板(姑且這么叫吧),可能是平時不多見,在ATL中卻是漫山遍野,幾乎每一個類都采用了這種實現方式.
先看代碼:
Codeclass?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).完成了繼承與虛函數可以實現的功能.
還有一個明顯的優點,那就是省去虛表結構.小的類也許虛表結構不大,但是大的類或者由于多次繼承產生的虛表膨脹就會占去很大的空間.而且虛表采用晚綁定方式,在性能上就會有一定下降.而采用這種方式,在空間與時間都有很多提高。(我想是這樣,不過沒測試過)
?
轉載于:https://www.cnblogs.com/anran_guojianjun/archive/2009/01/13/1374556.html
總結
以上是生活随笔為你收集整理的ATL中的C++模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯(java)阶乘计算,输入一个正整
- 下一篇: VC打印艰难之路