LINUX.ORG.RU

История изменений

Исправление eao197, (текущая версия) :

Чтобы не путаться в bool-ах достаточно использовать enum class.

О том и речь, что enum class для этого не годится совершенно.

Для замены bool-ов enum class не годится?

Да ладно вам. Скажем, было:

some_handle open_handle(const std::string & name, bool auto_init, bool auto_close);
...
auto my_handle = open_handle("...", true, false);

Элементарно переделывается в:

enum class auto_init { yes, no };
enum class auto_close { yes, no };

some_handle open_handle(const std::string & name, auto_init auto_init_mode, auto_close auto_close_mode);
...
auto my_handle = open_handle("...", auto_init::yes, auto_close::no);

Так что с последовательностью bool-ов enum class просто на ура справляется.

А вот со случаем битовых флагов – не очень. Хотя, тут как посмотреть: https://wandbox.org/permlink/tpyhgltWPUIH3yVi (а в C++23 обещают to_underlying завезти).

Исходная версия eao197, :

Чтобы не путаться в bool-ах достаточно использовать enum class.

О том и речь, что enum class для этого не годится совершенно.

Для замены bool-ов enum class не годится?

Да ладно вам. Скажем, было:

some_handle open_handle(const std::string & name, bool auto_init, bool auto_close);
...
auto my_handle = open_handle("...", true, false);

Элементарно переделывается в:

enum class auto_init { yes, no };
enum class auto_close { yes, no };

some_handle open_handle(const std::string & name, auto_init auto_init_mode, auto_close auto_close_mode);
...
auto my_handle = open_handle("...", auto_init::yes, auto_close::no);

Так что с последовательностью bool-ов enum class просто на ура справляется.

А вот со случаем битовых флагов – не очень. Хотя, тут как посмотреть: https://wandbox.org/permlink/tpyhgltWPUIH3yVi