【发布时间】:2012-03-11 15:26:30
【问题描述】:
目前CComPtr::operator= 是使用具有以下签名的辅助函数AtlComPtrAssign() 实现的:
IUnknown* AtlComPtrAssign( IUnknown** pp, IUnknown* lp);
并且必须像这样调用:
T* operator=( const CComPtr<T>& lp) throw()
{
if(*this!=lp) {
return static_cast<T*>(AtlComPtrAssign((IUnknown**)&p, lp));
}
return *this;
}
如果我尝试使用 T 作为实现多个 COM 接口的类来存储使用 CComPtr 会导致问题 - 到 IUnknown* 的转换变得模棱两可并且编译失败。
我的问题是 - 使用具有这些参数的辅助函数有什么需要?为什么不这样做:
template<classT>
T* AtlComPtrAssign( T** pp, T* lp);
并以任何合理的T 调用它?这个向上转换到IUnknown*然后反向转换到T*有什么需要?
【问题讨论】:
-
为什么
operator=返回T*而不是CComPtr<T>&?
标签: c++ com atl multiple-inheritance smart-pointers