我在公司中使用了第三方库。在其中,我需要的一些类定义如下:
class A
{};
class B : public A
{};
class C : public A
{};
class Foo
: public B
, public C
, public A
{};
在这里,我需要在 Foo 和它的所有基类之间获得偏移量。所以我这样编码:
int main()
{
Foo* f = new Foo();
int_ptr ptrb = ((B*)(Foo*)0x1) - 0x1;
int_ptr ptrc = ((C*)(Foo*)0x1) - 0x1;
int_ptr ptra = ((A*)(Foo*)0x1) - 0x1; // error
A *ptr = (A*)(Foo*)f; // error
cout << "Hello world!" << endl;
return 0;
}
在VC2010和VC2012中,一切正常。
但在 GCC 4.7.3 中,会有一个“Ambiguous base”编译错误。
我不得修改声明的任何代码。我怎样才能获得 Foo 和最后一个“公共 A”之间的偏移量?