我在理解 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/

10-12 23:51