non-virtual base class 的访问成员继承自两个不同的 classes

Access member of non-virtual base class inherited from two different classes

在一个多重派生的 class 中,其基础 class 继承自相同的基础 class 并且两个基础 class 都定义了一个与一个同名的成员在他们的基地class,如何通过不同的路径访问成员?

标题有点长,上图吧

struct A{int i;};
struct B1:A{int i;};//non virtual
struct B2:A{int i;};//non vitual
struct C:B1,B2{};

现在如何在 B1 中访问 A 中的 i 或 [=20 中的 B1 中的 A 中的 i =] object?

更清楚一点,c.i当然是有歧义的,其中c是一个C。但是c.A::i也是模棱两可的,有两条可行的路径:

C -> B1 -> A
C -> B2 -> A

如何指定一个使用?

static_cast 是一种冗长但明确的方法:

C c;
static_cast<B1&>(c).i;
static_cast<B2&>(c).i;
static_cast<A&>(static_cast<B1&>(c)).i;
static_cast<A&>(static_cast<B2&>(c)).i;