При реализации нескольких COM-интерфейсов одновременно, как выполнить upcast для IUnknown?

Предположим, что мой COM-объект реализует два или более COM-интерфейса:

class CMyClass : public IPersistFile, public IPersistStream {
};

при реализации QueryInterface () мне нужно иметь возможность вернуть указатель IUnknown *. Так как оба базовых интерфейса являются производными от IUnknown, я не могу неявно выгружать - такой выгрузка будет неясной. Для явного отката мне нужно использовать один из двух способов:

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast( this );
     static_cast( this )->AddRef();
     return S_OK;
 }

или же

 if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast( this );
     static_cast( this )->AddRef();
     return S_OK;
 }

Похоже, единственным требованием является то, что всякий раз, когда QI () вызывается для объекта, он каждый раз возвращает один и тот же указатель, и я выполняю это требование, если я выбираю какое-либо приведение и просто придерживаюсь его.

Какой upcast я должен выбрать и почему?

Ответы на вопрос(4)

Ваш ответ на вопрос