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