2010-12-14 79 views
0

Dans natif C++ nous pourrions utiliser trick ENUM dans la définition de la classe:astuce Enum en C++/CLI

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

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

Cependant, avec ENUM géré en C++/CLI,

public enum class EFoo 
{ 
    a = 10, 
}; 

EFoo :: un couldn Ne pas être converti implicitement en int, afin que le tour enum ne soit pas autorisé.

Y a-t-il une solution de contournement?

Merci.

Répondre

2

Essayez:

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

Jamais pensé que le compilateur accepte la diffusion dans la définition de classe. – Wilson

+0

Eh bien, vous ne lancez pas la définition de classe ou de classe. Vous venez de lancer la valeur enum. –

4

Si vous essayez simplement de réaliser le « enum hack », vous ne devriez pas avoir à le faire dans un compilateur récent, car ils soutiendront static const déclarations de membres.

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

Sinon, faire un casting int comme Jonathan Wood a répondu travaillerait à passer d'une gestion enum à un int.

1

Si vous n'avez pas besoin de l'enacpsulation, pourquoi ne pas le déclarer comme "enum" au lieu de "enum class"? Vous pouvez ensuite l'utiliser sans le cast, et aussi, sans le nom de la classe.