按值获取enum关键字
Get enum keyword by value
我有一个关于c++枚举的基本问题。
这是一个enum:
enum Names {
Tim = 0x1,
Bob = 0x2,
Jim = 0x4
};
如果我收到一个值(例如0x4
),我想打印相关的名称:Jim
。
有办法吗?比如Names.key(0x04)
?我知道这在Java中存在。
谢谢
正如许多人所说,这在普通的c++中是不可能的。但是如果你使用Qt,你可以定义注册到Qt元系统的枚举,这样你就可以在运行时检索枚举信息。
QMetaEnum类提供关于枚举器的元数据。
使用name()作为枚举数的名称。枚举数的键(名称)每个枚举项)由key()返回;使用keyCount()查找键的数量。isFlag()返回枚举数是否有意义用作标志,这意味着它的值可以使用
转换函数keyToValue()、valueToKey()、keysToValue()和valueToKeys()允许在整数表示之间进行转换枚举或集合值及其文字表示形式的。的Scope()函数返回此枚举数声明的类范围在。
class MyClass : public QObject
{
Q_OBJECT
Q_ENUMS(Priority)
public:
MyClass(QObject *parent = 0);
~MyClass();
enum Priority { High, Low, VeryHigh, VeryLow };
void setPriority(Priority priority);
Priority priority() const;
};
由于整个机制使用Qt元系统,您只能将此方法用于枚举,QObject派生类的成员。
不行。由于反射,这在Java中是可能的,这是c++中不存在的特性。
最好是将名称存储在映射中:
std::map<Names, std::string> names_string = {
{ Tim, "Tim"},
{ Bob, "Bob"}
// .....
};
std::cout << "Tim's enum: " << names_string[Tim] << std::endl;
不,在c++中没有办法做到这一点。首先,枚举的名称被编译出来。如果要从整型转换为enum类型,可以进行强制类型转换。
同理,如果你有
Foo foo = new Foo();
String name = "John";
int age = 23;
在c++中无法获取变量名
不,这不可能。像c++中的所有标识符一样,它们在运行时不再可用。也许map或set比enum更适合您的用例?
编写自己的函数来处理这个…
enum Names {
Tim = 0x1,
Bob = 0x2,
Jim = 0x4
};
std::string GetNameString(int nName)
{
if( nName == Tim )
return std::string("Bob");
else if( nName == Bob )
return std::string("Tim");
else if( nName == Jim )
return std::string("Jim");
return std::string("");
}
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- enum是C++中的宏变量还是整数变量
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 是否可以从int转换为enum类类型
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type
- 谷歌模拟和覆盖关键字
- 在C++中,将int值赋给enum,反之亦然
- 两个 COM 组件中 ENUM 的重复条目
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- 类继承,ENUM 与 AST 类实现的问题
- 在c++中使用嵌套类上的关键字来获取enum
- 按值获取enum关键字