[英]Scope operator for base class in super multiple non-virtual inheritance
考虑一下这个(完全没有道理,但完全有效的)类继承:
struct Area { int size; };
struct Pattern { int size; };
struct R : Area, Pattern {};
struct C : Area, Pattern {};
struct X: R , C {};
让我们看一下这个伟大的层次结构图:
Area Pattern
|\ /|
| \/ |
| /\ |
|/ \|
R C
\ /
\/
X
现在,如果我没记错的话,X应该有4个size
成员。
如何使用范围运算符引用它们?
显而易见的解决方案不起作用:
X x;
x.R::Area::size = 24;
铛错误:
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 xR::Area::size = 8; ^ 1 error generated.
gcc错误:
<source>: In function 'auto test()': 23 : <source>:23:14: error: 'Area' is an ambiguous base of 'X' xR::Area::size = 8; ^~~~
一些急需的澄清:
我只是在搞乱,这不是一个真正的设计
严格来说,这与解决歧义的C ++语法有关。
像static_cast<R&>(x).Area::size = 8;
这应该是丑陋的:)
为了弄清楚为什么原始代码不起作用,值得一提的是,合格的ID具有以下形式: type-name::id
所以xR::Area::y
等于using T = R::Area; xT::y;
using T = R::Area; xT::y;
就消除歧义而言,这显然无济于事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.