Можно ли получить размер перечисления?

 

В МТ есть не мало различных перечислений. Иногда их нужно передавать и каждому их них что-то присваивать. Возник вопрос, можно ли получить размер перечисления? Как я понимаю не возможно. Но иногда это на порядок сокращает затраты времени и строки кода.

Было бы удобно, что бы можно было, например, была возможность получить размер перечисления периодов ENUM_TIMEFRAMES и потом в цикле пробежать и что-то сделать, а не выписывать пачку if"ов.. и напротив константу периода.

 
hoz:

В МТ есть не мало различных перечислений. Иногда их нужно передавать и каждому их них что-то присваивать. Возник вопрос, можно ли получить размер перечисления? Как я понимаю не возможно. Но иногда это на порядок сокращает затраты времени и строки кода.

Было бы удобно, что бы можно было, например, была возможность получить размер перечисления периодов ENUM_TIMEFRAMES и потом в цикле пробежать и что-то сделать, а не выписывать пачку if"ов.. и напротив константу периода.

Если пишу сам, делаю так

enum months
   { 
    January, 
    February, 
    March, 
    April, 
    May, 
    June, 
    July, 
    August, 
    September, 
    October, 
    November, 
    December,
    End         // в конце любого enum вставляю End, годится для членов без явной инициации
   };

**

 
Alexey Volchanskiy:

Если пишу сам, делаю так

**

End то тут зачем? Я сам такие свои перечисления создаю. Но в данном случае всё-равно размер через точку не получить. Нет резона его создавать. А получить один из элементов можно стандартно и без того.

 
hoz:

В МТ есть не мало различных перечислений. Иногда их нужно передавать и каждому их них что-то присваивать. Возник вопрос, можно ли получить размер перечисления? Как я понимаю не возможно. Но иногда это на порядок сокращает затраты времени и строки кода.

Было бы удобно, что бы можно было, например, была возможность получить размер перечисления периодов ENUM_TIMEFRAMES и потом в цикле пробежать и что-то сделать, а не выписывать пачку if"ов.. и напротив константу периода.

В цикле не всегда возможно. Ведь члены перечисления могут следовать не подряд. ENUM_TIMEFRAMES - яркий тому пример.

if-ы плодить тоже не нужно. С этим быстро справится switch.

 
hoz:

End то тут зачем? Я сам такие свои перечисления создаю. Но в данном случае всё-равно размер через точку не получить. Нет резона его создавать. А получить один из элементов можно стандартно и без того.

о гос-с-споди...

enum months
   { 
    January, 
    February, 
    March, 
    April, 
    May, 
    June, 
    July, 
    August, 
    September, 
    October, 
    November, 
    December,
    End         // в конце любого enum вставляю End, годится для членов без явной инициации
   };
int length = (int)End; // 12
 
Ihor Herasko:

if-ы плодить тоже не нужно. С этим быстро справится switch.

У меня switch и используется. Я имел ввиду каждый кейсы выбирать, а можно было бы проще. Но как есть.

Причина обращения: