typedef和enum或enum类

use*_*501 5 c++ enums typedef c++11 enum-class

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

enum class truth_enum {
    my_true = 1,
    my_false = 0
};
Run Code Online (Sandbox Code Playgroud)

我希望能够将my_true公开给全局命名空间,以便我可以这样做:

char a_flag = my_true;
Run Code Online (Sandbox Code Playgroud)

或至少:

char a_flag = (char)my_true;
Run Code Online (Sandbox Code Playgroud)

而不是这个:

char a_flag = truth_enum::my_true;
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我尝试过这样的事情:

typedef truth_enum::my_true _true_;
Run Code Online (Sandbox Code Playgroud)

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

我的猜测是my_true是一个不是类型的值.有没有其他方法可以在我的程序中启用此功能?

不理想,但我可以这样做:

enum class : const char { ... };
const char const_flag_false = truth_enum::my_false;
Run Code Online (Sandbox Code Playgroud)

use*_*501 0

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

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

bool aboolean = (bool)my_true;
Run Code Online (Sandbox Code Playgroud)

而不必这样做:

bool aboolean = (bool)truth_enum::my_true;
Run Code Online (Sandbox Code Playgroud)

为什么是这样?