有没有办法在没有名称空间的C ++中嵌套枚举?

Mur*_*tro 2 c++ compiler-construction enums code-generation namespaces

我正在为给定的AST实现字节码生成器。在创建表达式类时,我注意到一元运算符和二进制运算符之间的区别。为简单起见,unum是首选解决方案,因此我以这种方式嵌套了枚举:

enum EXP_TYPE
{
    enum BINARY
    {
        PLUS,
        MINUS,
        MULTIPLY,
        DIV,
        ...
    };
    enum UNARY
    {
        PLUS,
        MINUS,
        POINTER,
        INC,
        ...
    };
};
Run Code Online (Sandbox Code Playgroud)

当然,此代码会发出警告,告知不允许这样做。所以,我搜索了计算器和其他来源了一下,发现使用的解决方案namespace,而不是enumEXP_TYPE声明。但是现在的问题是在表达式类内部的使用:

class expression
{
    expression *right_exp;
    expression *left_exp;
    EXP_TYPE type;
    ...
};
Run Code Online (Sandbox Code Playgroud)

由于EXP_TYPE是a namespace而不是enum类型,因此已不再允许使用。我打算做的是一个通用enum声明,该声明可用作类内的属性,在这里泛型意味着它可以是BINARYUNARY,也就是说,该属性EXP_TYPE type可以具有以下赋值和比较:

 expression exp1;
 exp1.type = EXP_TYPE::BINARY::PLUS;
 exp1.type = EXP_TYPE::UNARY::PLUS;
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使这些简单的泛型类型不使用namespace呈现的方式,也不需要为一元和二进制运算符创建类层次结构?

Lig*_*ica 6

不,您不能在枚举内部创建范围。

而是将您的枚举用更长的名称分类(例如EXP_TYPE::BINARY_PLUS)。