Нет.Это невозможно.Это из-за отсутствия стандартизации C ++ на двоичном уровне .
Дон Бокс пишет (цитата из его книги Essential COM , глава COM как лучше C ++ )
C ++ и переносимость
После того как принято решение распространять класс C ++ в виде DLL, возникает один из фундаментальных недостатков C ++ , а именно отсутствие стандартизации на двоичном уровне .Хотя рабочий документ ISO / ANSI C ++ пытается систематизировать, какие программы будут компилироваться и каковы будут семантические эффекты их запуска, он не пытается стандартизировать бинарную модель времени выполнения C ++ .Впервые эта проблема станет очевидной, когда клиент попытается соединиться с библиотекой импорта DLL-библиотеки FastString из среды разработки C ++ , отличной от , используемой для создания библиотеки FastString.
Заполнение структуры выполняется разными компиляторами по-разному.Даже если вы используете один и тот же компилятор, выравнивание упаковки для структур может отличаться в зависимости от того, какой пакет прагмы вы используете.
Мало того, что если вы напишите две структуры, членами которых являются точно то же самое, разница только в состоит в том, что порядок, в котором они объявлены, отличается, тогда размер каждой структуры может быть (и часто) разным.
Например, посмотрите это,
struct A
{
char c;
char d;
int i;
};
struct B
{
char c;
int i;
char d;
};
int main() {
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
}
Скомпилируйте его с помощью gcc-4.3.4
, и вы получите такой вывод:
8
12
То есть размеры разные, хотя обе структуры имеютте же члены!
Код в Ideone: http://ideone.com/HGGVl
Суть в том, что в стандарте не говорится о том, как должно выполняться заполнение, и поэтому компиляторы могут свободно принимать любое решениеи вы не можете предположить, что все компиляторы принимают одно и то же решение.