g++
拒绝我访问某个类型,仅仅因为它恰好是私人的父亲。这有意义吗?由于私人继承导致的无法访问类型
struct A {};
struct B : private A {};
struct C : B {
void foo(A const& a) {}
};
编译这产生了:
1:10: error: ‘struct A A::A’ is inaccessible
6:12: error: within this context
我的观点是:我从来没有想访问A
作为祖先。实际上,如果A
是B
的私人祖先,那么除了B
(即C
)之外,不应该对任何人完全看不到?
当然,我可以使用protected
继承,但在我的情况下,它没有任何意义。
这不是一个愚蠢的功能;它允许通过单独挑选用'using'公开的函数来限制继承的接口。 – avakar
你可以使用转发器功能来完成这项功能,并使C++继承模型变得更加混乱。私有继承不是继承,其组成和使用相同的语义来完成两个单独的概念只是混淆。 – rerun
这是组成和私人遗产之间的区别,因为后者允许您访问您父亲的受保护成员,而前者不会。 – bitmask