C ++ boost, как получить количество членов в enum? - PullRequest
0 голосов
/ 21 октября 2010

Есть ли что-нибудь в повышении, которое могло бы помочь в подсчете количества участников?

например. вернуть 3 для следующего кода:

<code>
enum SomeEnum
{
  One,
  Two,
  Three
}

Ответы [ 3 ]

6 голосов
/ 21 октября 2010

не совсем очевидно, о чем вы просите, но предположим, что у вас есть перечисление вроде:

enum Fruits
{
   Apples,
   Bananas,
   Pineapples,
   Oranges,
};

Вы можете изменить это так:

enum Fruits
{
   Apples = 0,
   Bananas,
   Pineapples,
   Oranges,
   NUM_FRUITS; // must be last, and no other fruits can be given values. 
};

Apples = 0, не является строго необходимым, он все равно может быть просто Apples,, потому что это будет результат по умолчанию, но это хорошая идея, потому что он дает понять, что вы на самом деле заботитесь какое значение он принимает.

И, таким образом, Fruits::NUM_FRUITS будет равно 4. Если вы добавите еще два фрукта, соблюдайте осторожность, чтобы поместить их над NUM_FRUITS, и убедитесь, что первый упомянутый фрукт установлен на ноль, либо неявно или явно, тогда NUM_FRUITS будет вместо 6.

2 голосов
/ 21 октября 2010

Я использую

enum SomeEnum
{
  FIRST = 1,
  One   = 1,
  Two   = 2,
  Three = 3,
  LAST  = 3
}
0 голосов
/ 21 октября 2010

Нет, общего автоматического решения после создания перечисления не существует.Если вы готовы заставить людей объявлять свои перечисления с помощью макроса, и ваш компилятор поддерживает переменные макросы, у вас может быть макрос, который создает перечисление и фиксирует количество элементов (stringify, поиск запятых, игнорирование любых пар внутри <>, (), [] и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...