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