Похоже, вы используете целочисленную структуру для хранения логических данных. Это может рассматриваться как лучший способ использования логической структуры для этой цели по причинам использования памяти.
Один из способов архивирования этой цели - использовать enum
или enum class
, которые наследуются от bool
:
enum class string_case : bool {
ONLY_LOWERCASE,
ONLY_UPPERCASE
}
Таким образом, вы будете использовать один байт, указывающий все, что вы хотите, вместо 8 байтов в вашем примере.
Пример использования:
doSomeThing(var, string_case::ONLY_UPPERCASE);
Edit
Если у вас более 2 флагов, вы все равно можете использовать enum
(только без наследования от bool
):
enum class string_case {
ONLY_LOWERCASE = 1,
ONLY_UPPERCASE = 2,
FLAG_3 = 3,
FLAG_4 = 4
};
И даже в этом случае, используя только 4 байта (вместо 4(bytes) * flags_count
).
Другой подход, если несколько флагов могут быть включены вместе (и вы не хотите играть с битами в своих enum
вычислениях), вы можете использовать структуру:
struct options {
bool option_1: 1;
bool option_2: 1;
bool option_3: 1;
bool option_4: 1;
};
Таким образом, вы будете использовать только то количество байтов, которое вам нужно для хранения этих битов.