Supponiamo di avere due classi con membri identici da due librerie differenti:Casting tra classi congruenti indipendenti
namespace A {
struct Point3D {
float x,y,z;
};
}
namespace B {
struct Point3D {
float x,y,z;
};
}
Quando provo cross-casting, ha funzionato:
A::Point3D pa = {3,4,5};
B::Point3D* pb = (B::Point3D*)&pa;
cout << pb->x << " " << pb->y << " " << pb->z << endl;
In quali circostanze è questo garantito a lavorare? Sempre? Si noti che sarebbe altamente indesiderabile modificare una libreria esterna per aggiungere un pragma di allineamento o qualcosa del genere. Sto usando g ++ 4.3.2 su Ubuntu 8.10.
Se avete pa, perché è che avete bisogno di pb? Dal momento che qualsiasi posto che utilizzeresti pb potrebbe semplicemente avere & pa. Non sono sicuro di essere chiaro sul ragionamento ... – ezpz