powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перебор элементов в enum
10 сообщений из 10, страница 1 из 1
Перебор элементов в enum
    #34976924
Serge N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вопрос по поводу enum в C++.

В Delphi я могу написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 type 
  TMyEnum = (meOne, meTwo, meThree);
 var 
  i : integer;
 begin 
   for  i:=ord(low(TMyEnum))  to  ord(high(TMyEnum))  do 
    ShowMessage(GetEnumName(TypeInfo(TMyEnum),  i));
 end ;

T.e. имея перечислимый тип, я могу перебрать все его элементы, не задавая напрямую их число - если будут добавлены новые элементы, например, meFour, код будет работать правильно, новый элемент будет обрабатываться автоматически. Кроме того я имею возможность получить строковое представление имени элемента перечислимого типа с помощью GetEnumName.

Как такое же реализовать на C++?
Если я пишу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#define ENUM_SIZE  3 
enum MyEnum {meOne, meTwo, meThree};

for(int i= 0 ;i<ENUM_SIZE;i++)
{
   MyEnum el = (MyEnum)i;
   // здесь нужно получить строковое представление el
}


1. как мне в цикле перебрать все элементы MyEnum, не задавая вручную их число, т.е. автоматически определять значение для ENUM_SIZE?

2. можно ли получить строковое представление названия элемента?

Меня интересует использование только стандартных библиотек C++, входящих в любой современный компилятор на основных OS.
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34977031
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
enum E {
   e1,
   e2,
   e_num
};

for (i= 0  ; i<e_num ; ++i)

Но enum для этого не предназначен. Может лучше использовать, например, костантный std::vector?
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34977049
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge N2. можно ли получить строковое представление названия элемента?

а для этого можешь использовать std::map
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34977113
Serge N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, разобрался
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34977286
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge N пишет:
> T.e. имея перечислимый тип, я могу перебрать все его элементы, не
> задавая напрямую их число - если будут добавлены новые элементы,
> например, meFour, код будет работать правильно, новый элемент будет
> обрабатываться автоматически. Кроме того я имею возможность получить
> строковое представление имени элемента перечислимого типа с помощью
> Как такое же реализовать на C++?

Никак. Ни то, ни другое языком напрямую не поддерживается.
Поэтому надо писать свои средства.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34980051
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНикак. Ни то, ни другое языком напрямую не поддерживается.
Поэтому надо писать свои средства.
Posted via ActualForum NNTP Server 1.4
Пи сать не надо - надо выбрать из уже готового.
CodeProject тебе в помощь.
http://www.codeproject.com/cpp/ObjectOrientedEnums.asp?target=BEGIN%5FENUM%5FDEFINITION

Среди имеющегося там многообразия работы с енумами - этот самый прямой.
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34981543
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
enum E {
   e1,
   e2,
   e_num
};

for (i= 0  ; i<e_num ; ++i)

Но enum для этого не предназначен. Может лучше использовать, например, костантный std::vector?

А что делать будем, если вот такое будет?
Код: plaintext
1.
2.
3.
4.
5.
    enum E {
      e1 = - 1 ,
      e2 =  35 ,
      e_num =  2 
    };

Вектор действительно получше будет.
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34981562
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555 Akh
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
enum E {
   e1,
   e2,
   e_num
};

for (i= 0  ; i<e_num ; ++i)

Но enum для этого не предназначен. Может лучше использовать, например, костантный std::vector?

А что делать будем, если вот такое будет?
Код: plaintext
1.
2.
3.
4.
5.
    enum E {
      e1 = - 1 ,
      e2 =  35 ,
      e_num =  2 
    };

Вектор действительно получше будет.

А не надо такое делать!

Я уже написал: std::vector<int>. Хочешь странного - и ответ странный
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34981659
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

А не надо такое делать!

Я уже написал: std::vector<int>. Хочешь странного - и ответ странный

Если ты заметил, то вовсе не я спрашивал ;-) Просто незачем давать тогда "странные" ответы, у человека может быть вполне конкретная цель, мне, правда, непонятная...
...
Рейтинг: 0 / 0
Перебор элементов в enum
    #34981781
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man_555 Akh

А не надо такое делать!

Я уже написал: std::vector<int>. Хочешь странного - и ответ странный

Если ты заметил, то вовсе не я спрашивал ;-) Просто незачем давать тогда "странные" ответы, у человека может быть вполне конкретная цель, мне, правда, непонятная...

Заметил.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перебор элементов в enum
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]