есть шаблон
template<class T, const IID* piid>
class IUnknownImp : public T
{
public:
IUnknownImp()
{
m_lRef = 0;
}
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppv)
{
if (iid == IID_IUnknown || iid == *piid || iid == IID_IDispatch)
{
*ppv = (T*)this;
AddRef();
return ( S_OK ) ;
}
return ( E_NOINTERFACE );
}
virtual ULONG STDMETHODCALLTYPE AddRef ()
{
++m_lRef;
return m_lRef;
}
virtual ULONG STDMETHODCALLTYPE Release()
{
if ( --m_lRef == 0 )
{
delete this;
return 0;
}
else
return m_lRef;
}
private:
DWORD m_lRef;
};
я создаю свой класс —
class CMyClass : public IUnknownImp<IMyInterface, IID_IMyInterface>
{
}
будет ли такая реализация работать правильно? при таком наследовании this в шаблоне будет указывать на CMyClass?
CMyClass object;
object->QueryInterface(....);
object->Release();