了解可怕的钻石中的歧义

时间:2018-08-20 11:20:15

标签: c++ multiple-inheritance ambiguous

我知道,当我创建可怕的钻石

struct Base { void foo() { } };
struct A: Base { };
struct B: Base { };
struct AB: A, B { };

内存表示为

Base Base
|    |
A    B
 \  /
  AB

因此调用AB ab; ab.foo();会引起歧义问题。但是当我从一个分支中隐藏foo

struct Base { void foo() { } };
struct A: Base { private: using Base::foo; };
struct B: Base { };
struct AB: A, B { };

ab中应该只有一个可访问 foo,但是仍然存在歧义。我想念什么?

0 个答案:

没有答案