Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以创建一个int+;C+中的枚举+;?_C++_Enums - Fatal编程技术网

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>;