Форум программистов, компьютерный форум CyberForum.ru

enum - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.68
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 13:47     enum #1
Ку!
Имеется некое множество
C++
1
2
3
4
5
6
7
enum SomeSet
{
    elem_1,
    elem_2,
    elem_3,
    // ...
};
Это множество активно юзается в том виде в каком оно прописано изначально...
Мне нужно создать еще одно множество, которое включает в себя все элементы этого вот множества, и дополняет его парочкой новых. Смысла дополнять непосредственно старое - нет - теряется смысловая нагрузка. *Сорри за тавтологию*
Есть ли такая возможность?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 13:47     enum
Посмотрите здесь:

C++ enum
enum C++
C++ enum
enum: цифры C++
C++ enum
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
10.03.2012, 14:04     enum #2
можно, просто добавить строчки и это не множество, а перечисление
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 14:09  [ТС]     enum #3
Да уж.

Цитата Сообщение от panicwassano Посмотреть сообщение
просто добавить строчки
В смысле
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
дополнить непосредственно старое перечисление
?
Zen Warrior
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 17
10.03.2012, 14:12     enum #4
То есть нужно что-то вроде наследования, только для перечислений?
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 14:19  [ТС]     enum #5
Цитата Сообщение от Zen Warrior Посмотреть сообщение
То есть нужно что-то вроде наследования, только для перечислений?
Да, вроде того...
Zen Warrior
1 / 1 / 0
Регистрация: 10.03.2012
Сообщений: 17
10.03.2012, 14:30     enum #6
Я, честно говоря, не понимаю, зачем это нужно. Тем более, что перечисляемая переменная может неявно преобразовываться к int, и переменной int можно присваивать значение из любого перечисления.
Стандартных средств (то есть предусмотренных языком) для этого, имхо, нет.
Можете чуть подробнее описать ситуацию?
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 14:39  [ТС]     enum #7
Да, мне тоже кажется, что стандартных средств нету.
Дело в том, что я пишу проект.

Есть ряд объектов, характеризующихся этим (исходным) перечислением.
Они достаточно сложным образом просчитываются.
Далее, в другом модуле, тоже есть ряд объектов, контейнеров, для вышеупомянутых объектов...
Эти контейнеры так же должны характеризоваться этим перечислением, но с дополнением в несколько новых полей (например главный объект, или нарисованный объект и тп).
Тем не менее нужда в старом перечислении так же сохраняется.
Все контейнеры содержатся в таблице (аналог std::map), и мне нужно их оттуда добывать посредством все того же злополучного перечисления.

В общем я забил и просто скопипастил старое перечисление в новое, с изменением префикса имени, и добавил несколько новых полей...
На мой взгляд это не совсем верно... Вдруг появятся новые позиции в старом перечислении, а в новом - забуду их дополнить)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
10.03.2012, 14:39     enum #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
HomeR_J_SimpsoN, можно сделать так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define ENUM_ENTITY(...) __VA_ARGS__
#define ENUM_DEFENTION(name, ...) typedef enum { __VA_ARGS__ } name
 
#define COMMON  ENUM_ENTITY(elem1, elem2)
#define SPEC_T1 ENUM_ENTITY(elem3, elem4, elem5)
#define SPEC_T2 ENUM_ENTITY(elem7)
 
ENUM_DEFENTION(type1, COMMON, SPEC_T1);
ENUM_DEFENTION(type2, COMMON, SPEC_T2);
 
int main()
{
    type1 t = elem2;
    return 0;
}
это будет развернуто в
C
1
2
3
4
5
6
7
8
typedef enum { elem1, elem2, elem3, elem4, elem5 } type1;
typedef enum { elem1, elem2, elem7 } type2;
 
int main()
{
    type1 t = elem2;
    return 0;
}
другое дело в каком виде вы хотите это компилироваться не будет, так как идентификаторы не должны повторяться
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 14:45  [ТС]     enum #9
alex_x_x, жестко)
Не, пожалуй к черту.
На счет переопределения идентификаторов - помню... И, думаю, действительно проще задать новое перечисление.
Спасибо.

Добавлено через 2 минуты
Кстати очень интересный способ...
Только, думаю, придется потом делать undef для typedef enum =) Чтоб не юзать ENUM_DEFENTION...
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
10.03.2012, 14:48     enum #10
Цитата Сообщение от HomeR_J_SimpsoN Посмотреть сообщение
Чтоб не юзать ENUM_DEFENTION...
ну вроде как в этом нет ничего страшного
для больших проектов, особенно на си вечно чтонибудь такое присутствует

вам его один раз в хедер положить, а в коде использовать переданное в ENUM_DEFENTION имя
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 14:49  [ТС]     enum #11
Я и не спорю)
Но, знаете, новое - страшно, а старое - привычно)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
10.03.2012, 15:21     enum #12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
enum A
{
  elem_1,
  elem_2,
  ...
  elem_9,
  elem_LAST /* уже НЕ используемое значение в данном перечислении */
};
 
enum B
{
  elem_10 = elem_LAST,
  elem_11,
  ...
}
Но это чисто техническая реализация (наиболее простая). Идеологически два перечисления, обладаемые твоими свойствами, являются некорректными
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
10.03.2012, 15:29  [ТС]     enum #13
Цитата Сообщение от Evg Посмотреть сообщение
Идеологически два перечисления, обладаемые твоими свойствами, являются некорректными
Да... Поэтому сделал 2 перечисления и сменил имена...
=)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2012, 15:32     enum
Еще ссылки по теме:

C++ Enum
enum C++
C++ enum

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
10.03.2012, 15:32     enum
  #14

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
HomeR_J_SimpsoN, можно сделать так
Совсем забыл про эту конструкцию. Добавил к себе в статью раздел 3.3.6, пока зарулил сюда в виде ссылки

Yandex
Объявления
10.03.2012, 15:32     enum
Ответ Создать тему
Опции темы

Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru