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,而不是enum对EXP_TYPE声明。但是现在的问题是在表达式类内部的使用:
class expression
{
expression *right_exp;
expression *left_exp;
EXP_TYPE type;
...
};
Run Code Online (Sandbox Code Playgroud)
由于EXP_TYPE是a namespace而不是enum类型,因此已不再允许使用。我打算做的是一个通用enum声明,该声明可用作类内的属性,在这里泛型意味着它可以是BINARY或UNARY,也就是说,该属性EXP_TYPE type可以具有以下赋值和比较:
expression exp1;
exp1.type = EXP_TYPE::BINARY::PLUS;
exp1.type = EXP_TYPE::UNARY::PLUS;
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使这些简单的泛型类型不使用namespace呈现的方式,也不需要为一元和二进制运算符创建类层次结构?
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |