【发布时间】:2012-05-03 16:32:26
【问题描述】:
我很难理解 ATL/WTL 代码中模板的用途。
当您查看 WTL 时,您会看到如下代码:
template <class TBase>
class CEditT : public TBase
{
...
};
typedef CEditT<ATL::CWindow> CEdit;
为什么CEditT 用模板基类定义?
换句话说,在T 不是 CWindowCEditT<T> 的情况下,CEditT<T> 会被实例化吗?
【问题讨论】:
-
也许是为了适应您想提供自己的 Window 实现的情况?
-
@Prætorian:你如何/为什么/什么时候想要/需要/这样做?
-
不知道:-)。也许您实现了一些非常精美的皮肤,并希望您的所有窗口都具有该皮肤。另外,这不是真正的 CRTP,是吗?如果它是CRTP,
CEdit将是class CEdit : public Base<CEdit> { ... }; -
@Prætorian:但这对于像 CEdit 这样的东西来说似乎真的很奇怪......而且,我想我在写“CRTP”时正在考虑
CWindowImpl。我会删除它,谢谢指出。
标签: c++ winapi visual-c++ atl wtl