可以在C++中隐藏继承层次结构的一部分吗?

oLe*_*Len 11 c++ oop inheritance qt

考虑以下:

B从类中公开继承A.两者都在库中提供,我无法修改它们.

我想实现一个Foo派生自的类B,但我想允许用户Foo只使用AFoo(而不是B)的公共函数.对于他们来说,Foo继承自己是不相关的B,这原则上是我无法避免的实现细节.

因此,原则上我想Foo公开继承A,但私下来B.

是否有一些C++中的构造允许我这样做?

我必须补充说,虚拟继承不是一个选项,因为A在我的例子中,派生自QObject(如果QObject是直接派生的话,请参阅使用*virtual*multiple inheritance是否安全?).

(注意:对于感兴趣的人:就我而言,AQWindowBQt3DExtras::Qt3DWindow)

Sto*_*ica 9

你在c ++中最接近的是:

class Foo : private B {
  public:
    using A::foo; // Expose function foo in Foo's API.
    using A::bar;
    operator A&() { return *this; } // Implicit conversion to `A` when needed.
    operator A const&() const { return *this; }
};
Run Code Online (Sandbox Code Playgroud)

  • `A*a = pointer_to_foo`,这是Qt的重要部分,不起作用 (2认同)