C++ 是否可以创建一个int+;C+中的枚举+;?
我正在编写一个程序,它使用堆栈将后缀算术表达式转换为中缀表达式。用户输入是一个字符串,它被拆分为一个数组(将空格视为分隔符)。然后,C++ 是否可以创建一个int+;C+中的枚举+;?,c++,enums,C++,Enums,我正在编写一个程序,它使用堆栈将后缀算术表达式转换为中缀表达式。用户输入是一个字符串,它被拆分为一个数组(将空格视为分隔符)。然后,“+”、“-”、“*”和“/”的case语句区分运算符和操作数(即,如果它不是这些符号中的一个,它是一个操作数;因此类型转换为整数) 我想知道是否有可能创建类似于枚举,其中允许的类型是整数,或者是符号+,-,*和/ 是否可以创建类似于枚举的内容,其中可接受的类型为整数 没有 AN代码> EnUM/COD>内部是C++基本类型的值。这里不能有整数和符号,除非您保留了
“+”
、“-”
、“*”
和“/”
的case语句区分运算符和操作数(即,如果它不是这些符号中的一个,它是一个操作数;因此类型转换为整数)
我想知道是否有可能创建类似于枚举
,其中允许的类型是整数,或者是符号+
,-
,*
和/
是否可以创建类似于枚举的内容,其中可接受的类型为整数
没有
AN代码> EnUM/COD>内部是C++基本类型的值。这里不能有整数和符号,除非您保留了一些解释为这些符号的数字
其他选择 当然:Union或struct可以解决此问题 是否可以创建类似于枚举的内容,其中可接受的类型为整数 没有AN代码> EnUM/COD>内部是C++基本类型的值。这里不能有整数和符号,除非您保留了一些解释为这些符号的数字
其他选择当然:Union或struct可以解决这个问题。这是一个很好的——或其doppelgänger的用例
enum类运算符:char{
加号=“+”,
负='-',
乘法='*',
除法='/'
};
//现在,令牌可以包含整数或运算符。
使用Token=std::variant;
这是一个很好的——或其doppelgänger的用例
enum类运算符:char{
加号=“+”,
负='-',
乘法='*',
除法='/'
};
//现在,令牌可以包含整数或运算符。
使用Token=std::variant;
那么,不可能创建一个只允许整数和这四个符号的混合数据类型吗?不,它们必须是不包括struct或等效项的整数类型。如果您有足够的32位整数,您可以使用64位整数并为此目的使用额外的位。因此,不可能创建允许整数且仅允许这四个符号的混合数据类型吗?不,它们必须是不包括结构或等效符号的整数类型。如果您有足够的32位整数,您可以使用64位整数并为此使用额外的位。您可能需要一个表示所需内容的标记类。然后为OperatorToken
和NumberToken
将其子类化,这样您就可以将它们都放在同一个堆栈上,或者使用类似isOperator()
这样更简单的方法,其中整数的值为OPERATOR\u PLUS
,OPERATOR\u MINUS
,等等。您可能需要一个表示所需内容的标记类。然后为OperatorToken
和NumberToken
将其子类化,这样您就可以将它们都放在同一个堆栈上,或者使用类似isOperator()
这样更简单的方法,其中整数的值为OPERATOR\u PLUS
,OPERATOR\u MINUS
,可以对枚举类运算符:char
@em2er进行一些增强。谢谢可以对枚举类运算符:char进行一些增强,为什么不呢。谢谢
enum class Operator : char {
plus = '+',
minus = '-',
multiply = '*',
divide = '/'
};
// Now a token can contain either an integer or an operator.
using Token = std::variant<int, Operator>;