2010-12-14 11 views
0

In native C++ wir Enum Trick in Klassendefinition verwenden:Enum Trick in C++/CLI

namespace EFoo 
{ 
    enum { a = 10; }; 
} 

class Foo 
{ 
    // Declare an array of 10 integers. 
    int m_Arr[EFoo::a]; 
}; 

jedoch mit verwalteten Enum in C++/CLI,

public enum class EFoo 
{ 
    a = 10, 
}; 

EFoo :: a couldn 't implizit in int konvertiert werden, , so dass der Enum-Trick nicht erlaubt wäre.

Gibt es eine Problemumgehung?

Danke.

Antwort

2

Versuchen:

arr[(int)EFoo.a]; 
+0

Ich dachte nie, dass der Compiler das Casting in der Klassendefinition akzeptiert. – Wilson

+0

Nun, Sie werfen nicht die Klasse oder Klassendefinition. Sie geben nur den Enum-Wert aus. –

4

Wenn Sie nur versuchen, die ‚enum Hack‘ zu erreichen, sollten Sie nicht zu tun haben, dass in jedem letzten Compiler, da sie static const Mitglied Erklärungen unterstützen.

class Foo 
{ 
private: 
    static const int ARRAY_SIZE = 10; 
    int m_arr[ARRAY_SIZE]; 
}; 

Andernfalls tut ein int Guss wie Jonathan Holz von einem verwalteten enum zu einem int ändern würde funktionieren beantwortet.

1

Wenn Sie die Enzepsulation nicht benötigen, warum nicht als "Enum" anstelle der "Enum-Klasse" deklarieren? Sie können es dann ohne die Besetzung und auch ohne den Klassennamen verwenden.