typedef и enum или enum class

У меня есть перечисление как это: (На самом деле, это перечисление класс)

enum class truth_enum {
my_true = 1,
my_false = 0
};

Я хотел бы иметь возможность выставить my_true в глобальном пространстве имен, чтобы я мог сделать это:

char a_flag = my_true;

Или по крайней мере:

char a_flag = (char)my_true;

Вместо этого:

char a_flag = truth_enum::my_true;

Это возможно?

Я пробовал что-то вроде этого:

typedef truth_enum::my_true _true_;

Я получаю сообщение об ошибке: my_true в enum-классе True_enum не называет тип

Я предполагаю, что my_true — это значение, а не тип. Есть ли альтернатива, которую я могу сделать, чтобы включить эту функцию в моих программах?

Не идеально, но я мог бы сделать что-то вроде:

enum class : const char { ... };
const char const_flag_false = truth_enum::my_false;

5

Решение

Удалить class от enum определение. Я предполагаю, что вы оскорблены неявным преобразованием в int, Как насчет:

static constexpr truth_enum _true_ = truth_enum::my_true;
static constexpr truth_enum _false_ = truth_enum::my_false;

или просто

const truth_enum _true_ = truth_enum::my_true;
const truth_enum _false_ = truth_enum::my_false;
1

Другие решения

Решение было простым, ошибка, которую я сделал, состояла в том, чтобы использовать enum class вместо перечисления.

Да, так что все еще немного сбит с толку на самом деле — теперь я могу просто использовать такие значения, как:

bool aboolean = (bool)my_true;

Вместо того, чтобы делать это:

bool aboolean = (bool)truth_enum::my_true;

Почему это?

0

По вопросам рекламы [email protected]