Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Получение всех членов перечисления (enum)


Автор: Zakhar_Shan 17.4.2009, 09:33
Допустим есть список:
Код

enum T{
x_1,
x_2,
x_3,
…
x_n
};


1.Можно ли узнать колличество значений в списке?
2.Можно их перебрать как например в массиве и вывести список в программе (Например в ComboBox)?

Зарание благодарствую smile !!!!!

Автор: zim22 17.4.2009, 09:40
Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
1.Можно ли узнать колличество значений в списке?

Код

enum e{first, second, third, fourth};
size_t d = fourth - first + 1;

Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
Можно их перебрать как например в массиве

нельзя

Автор: Zakhar_Shan 17.4.2009, 09:43
Цитата(zim22 @ 17.4.2009,  09:40)
Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
1.Можно ли узнать колличество значений в списке?

Код

enum e{first, second, third, fourth};
size_t d = fourth - first + 1;

Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
Можно их перебрать как например в массиве

нельзя

Так вот если я не знаю что там есть first  и fourth ???

Автор: zim22 17.4.2009, 09:52
Цитата(Zakhar_Shan @  17.4.2009,  09:43 Найти цитируемый пост)
Так вот если я не знаю что там есть first  и fourth ???

Код

enum {FIRST, SECOND, THIRD, NUMBER_OF_ELEMENTS = 3};
size_t size = NUMBER_OF_ELEMENTS;


Добавлено @ 09:55
Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
2.Можно их перебрать как например в массиве и вывести список в программе (Например в ComboBox)?

вам нужно выводить значения enum или сами названия полей?
значения enum вывести так можно:
Код
enum Enum{BEGIN, FIELD1 = BEGIN, FIELD2, FIELD3, END};
  for (Enum e = BEGIN; e != END; e = Enum(e + 1)) {
    std::cout << e;
  }  


Автор: mrbrooks 17.4.2009, 09:58
Zakhar_Shan, не слишком ли много хочешь от простого перечисления?

Автор: zim22 17.4.2009, 10:04
Цитата(mrbrooks @  17.4.2009,  09:58 Найти цитируемый пост)
, не слишком ли много хочешь от простого перечисления?

C# умеет это делать.

Автор: Rififi 17.4.2009, 10:04
Zakhar_Shan, 
1.Можно ли узнать колличество значений в списке?
нет.

2.Можно их перебрать как например в массиве и вывести список в программе (Например в ComboBox)?
нет.

Автор: mrbrooks 17.4.2009, 10:24
Цитата(zim22 @  17.4.2009,  10:04 Найти цитируемый пост)
C# умеет это делать

Ясен перец - там все типы уже как объекты.

Автор: zim22 17.4.2009, 10:26
Цитата(mrbrooks @  17.4.2009,  10:24 Найти цитируемый пост)
Ясен перец - там все типы уже как объекты.

угу, я помню ещё удивился, когда точку поставил чувак после целого числа и ему список свойств выпал smile

Автор: vinter 17.4.2009, 11:48
Цитата(zim22 @  17.4.2009,  10:52 Найти цитируемый пост)
значения enum вывести так можно:

только в частном случае, в общем случае их вывести в цикле нельзя

Автор: Zakhar_Shan 17.4.2009, 13:49
Цитата(zim22 @  17.4.2009,  09:52 Найти цитируемый пост)
вам нужно выводить значения enum или сами названия полей?
значения enum вывести так можно:

Мне нужно вывести в ComboBox сами имена переменых.
Например в случае с:
Код

enum T{
x_1,
x_2,
x_3,
…
x_n
};

Чтоб был список:
1.  x_1
2.  x_2


Цитата(mrbrooks @  17.4.2009,  09:58 Найти цитируемый пост)
Zakhar_Shan, не слишком ли много хочешь от простого перечисления? 

Много smile , Но C++ для меня по сравнению с другими я зыками как гулящая девочка, никогда нивчём не отказывал(а)....


Цитата(vinter @  17.4.2009,  11:48 Найти цитируемый пост)
только в частном случае, в общем случае их вывести в цикле нельзя 

Это что ежё за частный случай?

Автор: zim22 17.4.2009, 14:36
Цитата(Zakhar_Shan @  17.4.2009,  13:49 Найти цитируемый пост)
Это что ежё за частный случай

Когда каждый следующий член enum больше или меньше предыдущего на какое-то фиксированное число. 
Т.е. чтобы мы были в состоянии строить прогноз относительно значения след/пред. элемента.

Но ничто нам не мешает создать такой enum:
Код

enum Enum { FIRST = 200, SECOND = 0, THIRD = 200, FOURTH = -44 };


Цитата(Zakhar_Shan @  17.4.2009,  13:49 Найти цитируемый пост)
Мне нужно вывести в ComboBox сами имена переменых.

я не знаю, как можно вывести имена переменных...
разве что так:
Код

enum Enum { FIRST = 200, SECOND = 0, THIRD = 200, FOURTH = -44 };
std::string array[] = {"FIRST", "SECOND", "THIRD", "FOURTH"};
cout << array[0] << ... << array[3];


Автор: J0ker 17.4.2009, 16:09
Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
1.Можно ли узнать колличество значений в списке?

нет

Цитата(Zakhar_Shan @  17.4.2009,  09:33 Найти цитируемый пост)
2.Можно их перебрать как например в массиве и вывести список в программе (Например в ComboBox)?

нет

enum - compile time подстновка

Автор: Mattias 17.4.2009, 16:35
А как-нибудь через typeid() , type_info нельзя попробовать?

Автор: J0ker 17.4.2009, 17:01
Цитата(Mattias @  17.4.2009,  16:35 Найти цитируемый пост)
А как-нибудь через typeid() , type_info нельзя попробовать?

нет

enum - это не тип в полном смысле

Автор: zim22 17.4.2009, 17:08
Цитата(Mattias @  17.4.2009,  16:35 Найти цитируемый пост)
А как-нибудь через typeid() , type_info нельзя попробовать?

попробуйте. потом напишите, что получилось smile

Автор: vinter 17.4.2009, 17:09
был на форуме изврат с именами енумов через жопу макросы, ищи.

Автор: azesmcar 17.4.2009, 17:10
Цитата

enum - это не тип

а что это? smile 

user posted image
Код

typedef enum
{
    myenum1,
    myenum2
} myenum;

template <class T>
class A {};

int main()
{
    A<myenum> t;
}


Добавлено @ 17:12
Joker
поздно отредактировал smile 

Автор: vinter 17.4.2009, 19:52
azesmcar, строго гвооря это не самостоятельный тип, т.к у него есть underlying тип

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)