Краткая версия: Как узнать размер (в битах) отдельного поля поля C++?Получение размера отдельного поля из поля структуры C++
Чтобы уточнить, пример поля я говорю:
struct Test {
unsigned field1 : 4; // takes up 4 bits
unsigned field2 : 8; // 8 bits
unsigned field3 : 1; // 1 bit
unsigned field4 : 3; // 3 bits
unsigned field5 : 16; // 16 more to make it a 32 bit struct
int normal_member; // normal struct variable member, 4 bytes on my system
};
Test t;
t.field1 = 1;
t.field2 = 5;
// etc.
Чтобы получить размер всего объекта Test легко, мы просто говорим
sizeof(Test); // returns 8, for 8 bytes total size
Мы можем получить нормальный элемент конструкции через
sizeof(((Test*)0)->normal_member); // returns 4 (on my system)
Я хотел бы знать, как получить размер отдельного поля, скажем, тест :: Field4. Вышеприведенный пример для обычного элемента структуры не работает. Есть идеи? Или кто-то знает причину, почему он не может работать? Я довольно убежден, что sizeof не поможет, поскольку он возвращает только размер в байтах, но если кто-то знает иначе, я все уши.
Спасибо!
Я думаю, что вас могут обмануть, но я бы хотел, чтобы вас доказали неправильно. –
Я бы хотел воспользоваться этой возможностью, чтобы продолжить свой крестовый поход против битполей - просто не используйте их: http://stackoverflow.com/questions/289900/why-this-unions-size-is-2-with- bitfields/290855 # 290855 –