2
目前CComPtr::operator=
是使用具有以下特征的辅助功能AtlComPtrAssign()
实施AtlComPtrAssign有什么需要?</p> <pre><code>IUnknown* AtlComPtrAssign(IUnknown** pp, IUnknown* lp); </code></pre> <p>,并已被称为像这样:
T* operator=(const CComPtr<T>& lp) throw()
{
if(*this!=lp) {
return static_cast<T*>(AtlComPtrAssign((IUnknown**)&p, lp));
}
return *this;
}
,如果我尝试存储使用导致问题CComPtr
T
是一个实现多个COM接口的类 - 转换为IUnknown*
变得模糊不清,编译失败。
我的问题是 - 有什么需要使用这样的辅助函数,具有这些参数?为什么不这样做:
template<classT>
T* AtlComPtrAssign(T** pp, T* lp);
并调用它为任何合理的T
?有什么需要这个upcast到IUnknown*
,然后反向downcast到T*
?用于但是CComPtr <>
为什么'operator ='返回'T *'而不是'CComPtr&'? –
interjay
2012-02-21 10:16:25