このページのアドバイスに従って、 shared_ptrにdeleteの代わりにIUnknown :: Release()を呼び出させようとしています。
IDirectDrawSurface* dds;
... //Allocate dds
return shared_ptr<IDirectDrawSurface>(dds, mem_fun_ref(&IUnknown::Release));
エラーC2784:'std :: const_mem_fun1_ref_t <_Result、_Ty、_Arg> std :: mem_fun_ref(_Result(__ thiscall _Ty :: *)(_ Arg)const)':'_Result(__thiscall _Ty :: *)のテンプレート引数を推測できませんでした(_Arg)const'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: const_mem_fun_ref_t <_Result、_Ty> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(void)const)':'_Result(__thiscall _Ty :: *)(void )const'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: mem_fun1_ref_t <_Result、_Ty、_Arg> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(_ Arg))':'_Result(__thiscall _Ty :: *)( _Arg)'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: mem_fun_ref_t <_Result、_Ty> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(void))':'_Result(__thiscall _Ty :: *)(void)のテンプレート引数を推測できませんでした'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2661:'boost :: shared_ptr :: shared_ptr':オーバーロードされた関数は2つの引数を取りません
これをどうすればいいのかわからない。私の限られたテンプレート/ファンクターの知識が私を試してみました
typedef ULONG (IUnknown::*releaseSignature)(void);
shared_ptr<IDirectDrawSurface>(dds, mem_fun_ref(static_cast<releaseSignature>(&IUnknown::Release)));
しかし、役に立たない。何か案は?