ATL

参考:MFC程序员的WTL教程.

笔记....

#include <iostream>
using namespace std;

template <class T>
class BaseClass
{
public:
 void SayHi()
 {
  T* pT = static_cast<T*>(this);
  pT->PrintClassName();
 }
protected:
 void PrintClassName()
 {
  cout<<"This is the BaseClass"<<endl; 
 }
};

class FirstClass : public BaseClass<FirstClass>
{
  
};

class SecondClass: public BaseClass<SecondClass>
{
public:
 void PrintClassName()
 {
  cout<<"This is the SecondClass"<<endl;
 }
};


int main(int argc, char *argv[])
{
 FirstClass  firstObject;
 SecondClass secondObject;
 firstObject.SayHi();
 secondObject.SayHi();
 return 0;
}

结果: This is the BaseClass
This is the SecondClass
请按任意键继续. . .
/////////////////////////////////////////////////////////////////////////////////////////////

class CMyWnd : public CWindowImpl<CMyWnd>

{

...

};

这样做是合法的,因为 C++ 规范中声称紧随 class CMyWnd 部分之后,名字 CMyWnd 即被定义;并且可以被用在继承列表中。之所以把类名作为模板参数是因为要让 ATL 能做第二件技巧性的工作 - 编译期虚函数调用。

你可能感兴趣的:(职场,休闲,wtl)