2009-09-04 7 views
0

Ich bin verwaltete Erweiterungen in VS 2008Wie kann ich Enum :: GetName in nicht verwalteten C++

mit möchte ich den Namen eines en ENUM-Wert drucken

Dieser Code ist fein VS 2003 verwendet

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

aber jetzt bekomme ich einen Fehler comile

hier ist meine enum

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

Irgendwelche Hinweise? ;

+0

können Sie den Fehler einfügen bitte? –

Antwort

0

Können Sie rttitypeid() verwenden und das Feld name() verwenden?

Edit: Von Kommentar:

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

Ich habe darüber nachgedacht, aber es funktioniert nicht für Enum-Mitglieder AFAIK. –

+0

http://www.java2s.com/Tutorial/Cpp/0100__Development/Usingtypenumdatatype.htm ... stimmt mit mir überein. –

+0

Ja, das funktioniert gut Enum :: GetName (COMMAND_CODES :: typeid, iTmp) – Kaya

1

So weit ich weiß, ist das in Plain C++ nicht möglich, da es reflection nicht hat.

Sie können Makros einfach in C++ verwenden, um es zu umgehen:

#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 

Nun wird der Name des Aufzählungsmember so einfach wie CommandCodeNames[(int)commandCode] zu bekommen.

+0

Prost, aber ich hatte diesen Code in VS2003. NET 1.1 Ich denke, – Kaya

+0

Vielleicht kann der Typ zur Kompilierzeit übergeben werden – Kaya

+1

Es gibt einen großen Unterschied zwischen * verwaltet * und * unmanaged * -Code. Der spätere hat keine Spiegelung, also gibt es Enum :: GetName nicht. –