Трюк с перечислением в C ++ / CLI - PullRequest
0 голосов
/ 14 декабря 2010

В нативном C ++ мы могли бы использовать трюк enum в определении класса:

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

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

Однако, с управляемым enum в C ++ / CLI,

public enum class EFoo
{
  a = 10,
};

EFoo :: a не могбыть неявным образом преобразованным в int, поэтому трюк enum не будет разрешен.

Есть ли обходной путь?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 14 декабря 2010

Если вы просто пытаетесь добиться взлома 'enum', вам не нужно делать это ни в одном из последних компиляторов, поскольку они будут поддерживать static const объявления членов.

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

В противном случае выполнение int броска, как ответил Джонатан Вуд, сработало бы для перехода от управляемого enum к int.

2 голосов
/ 14 декабря 2010

Попробуйте:

arr[(int)EFoo.a];
1 голос
/ 17 января 2011

Если вам не нужна инкапсуляция, почему бы не объявить ее как "enum" вместо "enum class"? Затем вы можете использовать его без приведения, а также без имени класса.

...