bol*_*lov 5 c++ multiple-inheritance
考虑这个(完全非荒谬,但完全有效)类继承:
struct Area { int size; };
struct Pattern { int size; };
struct R : Area, Pattern {};
struct C : Area, Pattern {};
struct X: R , C {};
Run Code Online (Sandbox Code Playgroud)
让我们看一下这个伟大层次结构的图表:
Area Pattern
|\ /|
| \/ |
| /\ |
|/ \|
R C
\ /
\/
X
Run Code Online (Sandbox Code Playgroud)
现在,如果我没有弄错的话,X应该有4个size成员.
如何使用范围运算符引用它们?
显而易见的解决方案不起作用:
X x;
x.R::Area::size = 24;
Run Code Online (Sandbox Code Playgroud)
铿锵声:
Run Code Online (Sandbox Code Playgroud)23 : <source>:23:3: error: ambiguous conversion from derived class 'X' to base class 'Area': struct X -> struct R -> struct Area struct X -> struct C -> struct Area x.R::Area::size = 8; ^ 1 error generated.
gcc错误:
Run Code Online (Sandbox Code Playgroud)<source>: In function 'auto test()': 23 : <source>:23:14: error: 'Area' is an ambiguous base of 'X' x.R::Area::size = 8; ^~~~
一些非常需要的澄清:
我只是乱搞,这不是一个真正的设计
这完全是关于解决模糊性的C++语法.
就像是 static_cast<R&>(x).Area::size = 8;
这应该是丑陋:)
为了澄清原始代码不起作用的原因,值得一提的是,合格的id具有(以及其他)形式,type-name::id因此x.R::Area::y就using T = R::Area; x.T::y;消除歧义而言,这显然无济于事.