如何在非托管C ++中使用Enum :: GetName

时间:2009-09-04 11:08:06

标签: c++ visual-studio-2008 unmanaged

我在VS 2008中使用托管扩展

我想打印en enum值的名称

此代码曾经很好用VS 2003

Enum::GetName(__typeof(COMMAND_CODES),__box(iTmp))

但现在我收到了一个漫游错误

这是我的枚举

typedef enum  { /* Command codes */
    UMPC_NULL = 0,
    } COMMAND_CODES 

任何线索? ;

2 个答案:

答案 0 :(得分:1)

据我所知,这在普通C ++中是不可能的,因为它没有reflection

您可以在纯C ++中使用宏来解决它:

#define COMMAND_CODES \ 
    ENUM_OR_STRING(CODE1), \ 
    ENUM_OR_STRING(CODE1),

// Enum
#define ENUM_OR_STRING(x) x
enum CommandCodes
{
    COMMAND_CODES
};
#undef ENUM_OR_STRING

// Names
#define ENUM_OR_STRING(x) #x    
char *CommandCodeNames[] =
{
    COMMAND_CODES
}; 
#undef ENUM_OR_STRING

现在,枚举成员的名称与CommandCodeNames[(int)commandCode]一样容易获得。

答案 1 :(得分:0)

您可以使用rtti typeid()并使用name()字段吗?

编辑:来自评论:

 Enum::GetName(COMMAND_CODES::typeid,iTmp)