[英]Multiple inheritance without virtual functions in c++
我遇到了鑽石問題,並為一個鑽石找到了不同案例的不同解決方案。 但是,我無法找到“鏈式”鑽石的解決方案。
根據結構:是的,我希望每次都有多個基類,因此虛擬繼承不是解決方案(它甚至稱為菱形?)。 我還想避免鑽石每個中間層的get / set-functions。
p p
| |
k k
\ /
s
class parent { int val; };
class kid1 : public parent {};
class kid2 : public parent {};
class school : public kid1, public kid2 {};
在父類中訪問val現在可以如下工作:
school* s = new school;
s->kid1::val=1; // works
但是下一個“鏈式”鑽石呢:
p p p p
| | | |
k k k k
\ / \ /
s s
| |
c c
\ /
w
class country1 : public school {};
class country2 : public school {};
class world : public country1, public country2 {};
訪問val via:
world* w = new world;
w->country1::kid1::val=1; // error
結果是:
error: ‘kid1’ is an ambiguous base of ‘world’
為什么? 是不是很好地定義了價值的路線?
s->kid1::val
並不意味着“來自kid1
子對象的val
”。 它只是一個由包含它的類型(不是子對象)限定的名稱。
我不知道為什么country1::kid1
甚至被接受,但顯然它是::kid1
的typedef。 world
兩個數據成員都具有限定名稱::kid1::val
。
你想要的是:
world* w = new world;
country1* const c1 = world;
c1->kid1::val = 1;
它是。 該錯誤是由於編譯器中的錯誤引起的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.