【发布时间】:2011-06-20 13:00:02
【问题描述】:
实现IUnknown::QueryInterface() 的典型方式如下:为每个支持的接口ID 使用if-else-if 链并执行以下操作:
if( iid == __uuidof( IInterfaceN ) ) {
*ppv = static_cast<IInterfaceN>( this );
//call Addref(), return S_OK
}
现在static_castis necessary在这里进行多继承场景中的正确指针调整。
偶尔我会看到使用dynamic_cast 的实现。 IMO 那是在浪费时间 - 结果是一样的,只是需要更长的时间,并且会使实施过度设计。
在将this指针复制到IUnknown::QueryInterface()实现的void**参数之前,确实需要使用dynamic_cast来转换它吗?
【问题讨论】:
标签: c++ com casting multiple-inheritance