如何从多重继承的基础中获取类地址?
how could I gain a class address from it's base in multiple-inheritance?
我在公司使用了第三方库。其中,我需要的一些类是这样定义的:
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"之间的偏移量?
您的代码可以简化为:
class A
{};
class B : public A
{};
class Foo
: public B
, public A
{};
这里Foo
类有两个A
基类
- 一个间接基类
A
命名为Foo::B::A
- 一个不能在c++中命名的直接基类
A
您将能够获得Foo
对象的B::A
基类子对象:
Foo f;
B &b = f;
A &a = b;
但不是其他A
不可能命名的基类子对象。
结论:不要那样做
还有:我真的不知道你到底想做什么
相关文章:
- 如何在C++中获取该对象的类声明中对象的地址?
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 如何获取C++字符数据类型的地址
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 动态获取 esp32 的 mac 地址并在以太网库中使用它.
- 获取 R 数据帧的内存地址
- 获取通用/前向引用地址有什么意义?
- 获取函数的地址?
- 获取指针的地址会为其分配一个值
- Assimp 库错误:获取打包成员的地址
- 有没有可以直接获取地址的右值?
- 在char*类型上使用static_cast获取地址,并获得24位和48位地址
- 从套接字获取地址系列.Linux
- 为什么在解析 main() 参数时获取地址值
- 获取地址在数组2d中的位置
- 在c++中获取地址的内容
- 如何在c#函数中从委托中获取地址
- 无法获取地址 (wcsstr) - 未定义的变量