我在理解 ATL/WTL 代码中模板的用途时遇到了很多麻烦。
当您查看 WTL 时,您会看到如下代码:
template <class TBase>
class CEditT : public TBase
{
...
};
typedef CEditT<ATL::CWindow> CEdit;
为什么
CEditT
用模板基类定义?换句话说,在什么情况下
CEditT<T>
会被实例化,其中 T
是 而不是 CWindow
? 最佳答案
这样您就可以覆盖 ATL::CWindow
中由 ATL/WTL 类调用的方法。如果您不喜欢 ATL::CWindow
中的某些内容,您可以使用覆盖方法从 ATL::CWindow
派生一个类,然后将您的新类作为 TBase
传递。
例如,ATL::CWindow::CenterWindow
有很长一段时间有一个错误,它没有正确考虑多个监视器,我已经看到人们使用这种技术用固定的实现覆盖 CenterWindow
。
关于c++ - 为什么*一切*在 ATL/WTL 中使用模板基类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10274184/