У меня есть перечисление как это: (На самом деле, это перечисление класс)
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;
Удалить 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;
Решение было простым, ошибка, которую я сделал, состояла в том, чтобы использовать enum class
вместо перечисления.
Да, так что все еще немного сбит с толку на самом деле — теперь я могу просто использовать такие значения, как:
bool aboolean = (bool)my_true;
Вместо того, чтобы делать это:
bool aboolean = (bool)truth_enum::my_true;
Почему это?