我正在写一个程序,将后缀算术表达式转换为使用堆栈的中缀表达式。用户输入是一个字符串,它被分成一个数组(将空格视为分隔符)。然后,"+"
,"-"
,"*"
和"/"
的一个case语句区分运算符和操作数(即,如果它不是这些符号中的一个,则它是一个操作数;因此将类型转换为整数)。是否有可能在C++中创建一个int +枚举?
我想知道它是否可以创建类似的东西到enum
,其中受理类型要么是整数或符号+
,-
,*
和/
?
我正在写一个程序,将后缀算术表达式转换为使用堆栈的中缀表达式。用户输入是一个字符串,它被分成一个数组(将空格视为分隔符)。然后,"+"
,"-"
,"*"
和"/"
的一个case语句区分运算符和操作数(即,如果它不是这些符号中的一个,则它是一个操作数;因此将类型转换为整数)。是否有可能在C++中创建一个int +枚举?
我想知道它是否可以创建类似的东西到enum
,其中受理类型要么是整数或符号+
,-
,*
和/
?
是否有可能创建类似的东西来枚举,其中允许的类型或者是整数
号
一种enum
内部是一个C++基本类型的值。你不能在那里有整数和符号,除非你保留一些解释为这些符号的数字。
其他替代
肯定的是:联盟或结构可以解决这个问题。
那么不可能创建一个允许整数和只有这四个符号的混合数据类型? –
不,它们必须是'Integral类型',它不包含结构体或等价物。如果你有足够的32位整数,你可以使用一个64位整数,并使用额外的位来达到这个目的。 –
这是一个很好的使用案例std::variant
- 或它的doppelgängerboost::variant
。
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>;
你可能想要一个代表任何你想要的'Token'类。然后可以为'OperatorToken'和'NumberToken'创建子类,以便将它们全部放在同一个堆栈中,或者使用像isOperator()这样简单的东西,其中整数的值将是'OPERATOR_PLUS','OPERATOR_MINUS'等 – Peter