#pragma pack, шаблон typedefs и выравнивание структуры - PullRequest
2 голосов
/ 10 ноября 2011

Используя Visual Studio или gcc, если у меня есть

#pragma pack(push, 16)

typedef std::map<uint32_t, uint32_t> MyIntMap;

#pragma pack(pop)

, то позже:

#pragma pack(push, 8)

MyIntMap thisInstance;

#pragma pack(pop)

Каково выравнивание структуры этого экземпляра?То есть для класса шаблона typedef вступает в силу прагма-пакет вместо typedef или определения переменной?Если это последний вариант, как можно обойтись, чтобы получить тип с согласованным выравниванием по файлам?

1 Ответ

4 голосов
/ 10 ноября 2011

В вашем коде #pragma pack не будет иметь никакого эффекта.Он действует только тогда, когда действует вокруг определения структуры или класса, а не вокруг определения типа или чего-либо еще.Также это никак не влияет на определение этой переменной.

Вы можете увидеть здесь использование: http://msdn.microsoft.com/en-us/library/2e70t5y1(v=VS.100).aspx

В частности:

упаковка вступает в силу с первого разаобъявление struct, union или class после прагмы.Пакет не влияет на определения.

...