C++ 如何给出枚举值的索引并获取它?
我有这个枚举:C++ 如何给出枚举值的索引并获取它?,c++,C++,我有这个枚举: enum Status { CONTINUE, WON, LOST }; 我想给出其中一个值的索引(例如1表示赢),然后得到值(赢)。 我搜索了一下,但我找到了相反的方法!!! 我发现这段代码可以执行,但它再次为我提供了索引: int main() { enum Status { CONTINUE, WON, LOST }; int myInteger = 1; Status myValue = (Status)myInteger; cout << myValue
enum Status { CONTINUE, WON, LOST };
我想给出其中一个值的索引(例如1表示赢),然后得到值(赢)。
我搜索了一下,但我找到了相反的方法!!!
我发现这段代码可以执行,但它再次为我提供了索引:
int main()
{
enum Status { CONTINUE, WON, LOST };
int myInteger = 1;
Status myValue = (Status)myInteger;
cout << myValue <<endl;//it rerurns 1 !!!
system("PAUSE");
}
intmain()
{
枚举状态{继续,赢得,丢失};
int myInteger=1;
状态myValue=(状态)myInteger;
coutC++“继承”了C中的enum
。它实际上只不过是C中传统操作方式的简写符号,您的enum
应该是这样的:
#define CONTINUE 0
#define WON 1
#define LOST 2
enum
自动为符号分配连续数字,但仅此而已
C++11添加了enum类
,该类创建了一个更像普通类型的枚举,但它仍然没有提供一种(自动)从数字表示转换为所用符号的方法。C++“继承”C中的enum
。它实际上只不过是C中处理事情的传统方法的简写符号,其中您的enum
应该是:
#define CONTINUE 0
#define WON 1
#define LOST 2
enum
自动为符号分配连续数字,但仅此而已
C++11添加了enum类
,该类创建了一个更像普通类型的枚举,但它仍然没有提供一种(自动)从数字表示转换为所用符号的方法。您可以使用STL中的map
对于Instance:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
typedef enum { CONTINUE, WON, LOST } status_t;
map<int, string> Status = {
{CONTINUE, "CONTINUE"},
{WON, "WON"},
{LOST, "LOST"}
};
cout << Status[1] << endl;
// It's also possible
cout << Status[CONTINUE] << endl;
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
typedef枚举{继续,赢得,丢失}状态\u t;
地图状态={
{继续,“继续”},
{WON,“WON”},
{迷失,“迷失”}
};
cout您可以使用STL中的map
对于Instance:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
typedef enum { CONTINUE, WON, LOST } status_t;
map<int, string> Status = {
{CONTINUE, "CONTINUE"},
{WON, "WON"},
{LOST, "LOST"}
};
cout << Status[1] << endl;
// It's also possible
cout << Status[CONTINUE] << endl;
return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
typedef枚举{继续,赢得,丢失}状态\u t;
地图状态={
{继续,“继续”},
{WON,“WON”},
{迷失,“迷失”}
};
coutenum
type只保存值而不是名称
也许你可以这样编码
enum Status { CONTINUE, WON, LOST };
const char* status_names[] = {"CONTINUE", "WON", "LOST"};
int myInteger = 1;
cout << status_names[myInteger] << endl;
enum状态{继续,赢得,丢失};
const char*status_names[]={“CONTINUE”、“WON”、“LOST”};
int myInteger=1;
coutenum
type只保存值而不是名称
也许你可以这样编码
enum Status { CONTINUE, WON, LOST };
const char* status_names[] = {"CONTINUE", "WON", "LOST"};
int myInteger = 1;
cout << status_names[myInteger] << endl;
enum状态{继续,赢得,丢失};
const char*status_names[]={“CONTINUE”、“WON”、“LOST”};
int myInteger=1;
cout enum将打印它们的数值,而不是您给它们的名称。如果没有if/case,就无法继续/赢得/丢失???听起来您只需要一个std::vector
就可以使用v[myInteger]访问索引
并获取一个字符串。不,这是一个大学项目,应该由enum完成!!!因此我认为有一种方法可以在enum中提供/获取IndexValue!!因此如果没有,我无法理解enum的用法?!enum用于从有限的范围内选择有意义的名称。无论如何,有可能,尽管很难看,主要是自动从v开始value to string和back with Boost.Preprocessor.enums将打印它们的数值,而不是您给它们的名称。如果没有if/case,就无法获得CONTINUE/win/LOST???听起来您只需要一个std::vector
就可以使用v[myInteger]访问索引
并获取一个字符串。不,这是一个大学项目,应该由enum完成!!!因此我认为有一种方法可以在enum中提供/获取IndexValue!!因此如果没有,我无法理解enum的用法?!enum用于从有限的范围内选择有意义的名称。无论如何,有可能,尽管很难看,主要是自动从v开始使用Boost.Preprocessor将value转换为字符串并返回。因此,最后我们应该使用其他东西来获得名称:D,但使用它是一个好主意!(Y)因此,最后我们应该使用其他东西来获得名称:D,但使用它是一个好主意!(Y)