相关疑难解决方法(0)

在具有多个接口的对象中实现QueryInterface()时,为什么需要显式向上转换()

假设我有一个实现两个或更多COM接口的类:

class CMyClass : public IInterface1, public IInterface2 {
};
Run Code Online (Sandbox Code Playgroud)

几乎我看到的每个文档都表明,当我为IUnknown实现QueryInterface()时,我明确地将此指针向上转换为其中一个接口:

if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IInterface1>( this );
     //call Addref(), return S_OK
}
Run Code Online (Sandbox Code Playgroud)

问题是为什么我不能复制这个

if( iid == __uuidof( IUnknown ) ) {
     *ppv = this;
     //call Addref(), return S_OK
}
Run Code Online (Sandbox Code Playgroud)

文档通常说如果我执行后者,我将违反对同一对象上的QueryInterface()的任何调用必须返回完全相同的值的要求.

我不太明白.难道他们的意思是,如果我QI()用于IInterface2和调用QueryInterface()通过该指针C++将通过略有不同,如果我QI()用于IInterface2因为C++每次都会使点到子对象?

c++ com multiple-inheritance visual-c++

14
推荐指数
2
解决办法
6065
查看次数

"继承是否应该避免"的想法源自哪里?

最近我们讨论了这里提到的一个缺陷,其中一方表示"是的,这就是为什么书籍说应该避免继承."

我已经使用了多年的继承,并发现它在许多设计案例中非常有用和方便.此外,我确信这个人至少会误解这些"书说"的内容.

真的有一种想法,继承有点坏,应该避免吗?它来自哪里,我在哪里可以了解更多?

language-agnostic inheritance design-patterns

6
推荐指数
1
解决办法
318
查看次数