Считаются ли постоянные «флажки» хорошим стилем? (c ++) - PullRequest
1 голос
/ 20 июня 2020

В настоящее время я работаю над библиотекой, и мне интересно, считается ли хорошим стилем иметь константы с заглавными буквами, например:

constexpr int ONLY_LOWERCASE = 1;
constexpr int ONLY_UPPERCASE = 2;

И так далее. Я планирую использовать его, чтобы позволить пользователю библиотеки контролировать поведение таких функций, как:

doSomeThing(var, ONLY_UPPERCASE);+

Спасибо

1 Ответ

2 голосов
/ 20 июня 2020

Похоже, вы используете целочисленную структуру для хранения логических данных. Это может рассматриваться как лучший способ использования логической структуры для этой цели по причинам использования памяти.

Один из способов архивирования этой цели - использовать 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;
};

Таким образом, вы будете использовать только то количество байтов, которое вам нужно для хранения этих битов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...