我正在尝试使用COM智能指针(为_com_ptr_t
生成的包装类之一)创建一个CList作为模板参数:
CList<IDispatchPtr, IDispatchPtr> list;
但是我得到了几个类似于:
的编译错误
error C2664: 'void __stdcall SerializeElements(class CArchive &,class _com_ptr_t<class _com_IIID<struct IDispatch,&struct __s_GUID _GUID_00020400_0000_0000_c000_00000000004 6> > *,int)' : cannot convert parameter 2 from 'struct IDispatch ** ' to 'class _com_ptr_t<class _com_IIID<struct IDispatch,&struct __s_GUID _GUID_00020400_0000_0000_c000_000000000046> > *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
使用常规指针时编译:
CList<IDispatch*, IDispatch*> list;
查看调用SerializeElements的MFC代码,看起来问题是它需要TYPE *并且IDispatch** and IDispatchPtr*
之间没有转换。有没有办法解决这个问题?
答案 0 :(得分:5)
由于operator&
被重载的方式,您需要将智能指针包装在CAdapt<>
中:
CList<CAdapt<IDispatchPtr>, CAdapt<IDispatchPtr> > list;