Пусть у меня есть два класса с одинаковыми членами из двух различных библиотек:Casting между несвязанными конгруэнтными классами
namespace A {
struct Point3D {
float x,y,z;
};
}
namespace B {
struct Point3D {
float x,y,z;
};
}
Когда я пытаюсь кросс-кастинг, он работал:
A::Point3D pa = {3,4,5};
B::Point3D* pb = (B::Point3D*)&pa;
cout << pb->x << " " << pb->y << " " << pb->z << endl;
При каких обстоятельствах это гарантированно работать? Всегда? Обратите внимание, что было бы крайне нежелательно редактировать внешнюю библиотеку, чтобы добавить прагму выравнивания или что-то в этом роде. Я использую g ++ 4.3.2 на Ubuntu 8.10.
Если у вас есть ра, почему это, что вам нужно пб? Поскольку любое место, где вы будете использовать pb, может просто иметь & pa. Я не уверен, что я ясно рассуждаю ... – ezpz