У меня есть struct
, например:
struct Foo {
unsigned int id;
unsigned int flag_1 : 1;
unsigned int flag_2 : 1;
unsigned int flag_3 : 1;
// Some arbitrary number of further flags. Code is
// automatically generated and number will vary.
// Notably, it may be more than an int's worth.
int some_data;
float some_more_data;
// ...
};
Время от времени мне нужно сбрасывать все флаги в ноль, сохраняя при этом остальную часть структуры. Один из способов, очевидно, состоит в том, чтобы установить каждый флаг на 0 отдельно, но такое чувство, что должен быть способ сделать это одним ударом oop. Возможно ли это?
(Обратите внимание, что я открыт для того, чтобы не использовать битовые поля, но этот код иногда запускается в системах с ограниченным объемом памяти, поэтому экономия памяти очень привлекательна.)
Редактировать:
Здесь есть похожий вопрос: Сбросить все биты в c битовом поле
Однако структура в этом вопросе является полностью битовыми полями. Я не могу просто memset
здесь всю структуру обнулить, и другой ответ, связанный с объединениями, не гарантированно сработает, особенно если флагов больше, чем у int.