5

我有一个这样的枚举:(实际上,它是一个枚举类)

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_;

我收到错误:枚举类 truth_enum 中的 my_true 未命名类型

我的猜测是 my_true 是一个值而不是一个类型。我可以做些什么来在我的程序中启用此功能吗?

不理想,但我可以做类似的事情:

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

2 回答 2

1

classenum定义中删除。我假设您对隐式转换为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;
于 2013-07-24T01:45:27.567 回答
0

解决方案很简单,我犯的错误是使用enum class而不是枚举。

是的,实际上还是有点困惑 - 我现在可以使用以下值:

bool aboolean = (bool)my_true;

而不必这样做:

bool aboolean = (bool)truth_enum::my_true;

为什么是这样?

于 2013-07-24T01:45:33.930 回答