首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

WTL的几句代码看不懂,该如何处理

2012-07-30 
WTL的几句代码看不懂1 template class T, class TBase CWindow class CDialogImpl2 template class

WTL的几句代码看不懂

1 template <class T, class TBase = CWindow> class CDialogImpl;

2 template <class T, class TBase /* = CWindow */> 
class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT< TBase >

3 class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,public CMessageFilter, public CIdleHandler

问题:
  经过上面3句代码,就可以在CMainDlg类中直接使用CWindow类里的public成员了,我照着写了一个一样的例子却不行,为什么啊,还是我有看漏的地方

[解决办法]
直接class CMainDlg : public CDialogImpl<CMainDlg> 就可以了。
[解决办法]
建议你看看 模版和继承
[解决办法]
CWindow->CWindowImplRoot->CDialogImplBaseT->CDialogImpl
根据以上继承关系说明,继承CDialogImpl是可以达到你的目的的,这与WTL的其他细节无关。

WTL中使用编译器的模板多态来完成函数的重写,同时完成消息处理的接口分发。

你看下atlapp.h这个文件就全明白了。

CIdleHandler是个供你实现的接口

C/C++ code
class CIdleHandler{public:    virtual BOOL OnIdle() = 0;};
[解决办法]
给你解释下
1 template <class T, class TBase = CWindow> class CDialogImpl;
实例化TBase = CWindow

2 template <class T, class TBase /* = CWindow */>
class ATL_NO_VTABLE CDialogImpl : public CDialogImplBaseT< TBase >
这个是模版定义

3 class CMainDlg : public CDialogImpl<CMainDlg>
继承CDialogImpl,并实例化class T, 得到最终的实例化CMainDlg

热点排行
Bad Request.