1.2 ATL介绍

class CMyWnd : public CWindowImpl<CMyWnd>

{

};

这样是合法的,因为C++语法解释说即使CMyWnd类只是被部分定义,类名CMyWnd已经被列入递归继承列表,是可以使用的。将类名作为模板类的参数是因为ATL要实现编译期间的虚函数调用机制。

static_cast<T*>(this),根据函数调用时的特殊处理将指向B1的指针指派为D1或D2的指针,因为模板代码是编译期间生成的,所以只要编译器生成正确的继承列表,这样指派就是安全的。

如果写成class D3 : public B1<D2>就会有问题。

这很像C++的多态,只是SayHi函数不是虚函数。

这种技术的有利之处在于:

不需要使用指向对象的指针;

节省内存,因为不需要虚函数表;

因为没有虚函数表所以不会发生在运行时调用空指针指向的虚函数;

所有的函数调用在编译时确定,有利于编译程序对代码的优化。

您还未添加分享代码,请到主题选项中,添加百度分享代码!

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

图片 表情