ATL实现中,模版技术的使用

在ATL实现中,大量使用模版技术.
开始看到那些 <> 就晕.
现在感觉到它的一些好处---在编译时实现多态.
也就是说,当某个实现非常典型.实现时只是个别类型或参数变化时,使用模版类实现起来非常容易.只需将变化的类型或参数实现模版的参数化即可.

模版技术非常适合一些架构的实现---   就像ATL一样. 

比如:IDispatch接口的实现IDispatchImpl
凡是实现IDispatch的组件,都要实现IDispatch接口的几个方法(GetIDsOfNames,   Invoke   ...).
实现过程大同小异.只是随双接口类型,接口标识符,类型库标识符和主副版本号变化.这是非常适合引进模版类实现这些常规实现.
template <class   T,   IID   *piid,   ....>
class   ATL_NO_VTBL   IDispatchImpl   :   public   T
{
.....
}


这样,要实现IDispatch接口的组件,就不需要反复实现那些 "标准 "的方法(GetIDsOfNames,   Invoke   ...).只需继承IDispatchImpl即可.

而组件设计者只需实现接口本身方法即可.---简单多了!

同理,对IUnKnown接口的实现也是如此---通过CComObject <T> 来实现.

也就是说组件其他都不变,只需继承IDispatchImpl,就可以实现IDispatch接口.
只需CComObject <T> 就可以实现IUnKnown接口.

那为什么不将IUnKnown接口实现直接作进组件内部?那是因为--要实现组件生命周期实现的灵活性!

也就说,让client在运行时决定组件的生命周期.

你可能感兴趣的:(Class)