![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
SaDFromSpb |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Всегда раздражали стандартные enum'ы как минимум двумя вещами :
Первая вещь:
// ONE, TWO, THREE попадают в область видимости, такую же как у MyEnum, а не скрываются внутри (как это сделано в яве). Имеем проблему: при создании какого-нибудь енума с элементами вроде LEFT, RIGHT, DOWN, UP в очень общем хедере рискуем, что такие имена могут быть нечаянно перекрыты в пользовательском коде. Есть два Выхода: 1) Добавление префиксов
2) Сокрыте в нэймспейсе
Вторая вещь:
Иногда хочется не допустить, чтоб кто-нибудь мог присвоить енуму значение не из первоначального списка инициализации. Предлагается следующее решение:
И его использование:
Правда вот, не знаю, поддерживается ли __VA_ARGS__ всеми компиляторами. Нужно будет глянуть в стандарте... Замечания и критика приветствуются. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
||||||||||||
|
|||||||||||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
пардон за
![]() ![]() бедный enum. досталось ему. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а если написать так, то что неудобно?
Добавлено через 6 минут и 14 секунд ![]() ![]() |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
до принятия нового стандарта не так уж и много осталось - там энамы уже нормальные
|
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Получается Directions::Enum dir = Directions::LEFT; Неудобно.
Круто! Всё лень его изучить. Значит, не одному мне старые енумы не нравились..... ![]() Добавлено через 6 минут и 3 секунды Хотя, я думаю, еще во многих консервативных конторах, вроде моей, будут долго отторгать новый стнадарт, мотивируя это требованием, чтоб создаваемый код на старых клиентских платформах собирался.... Это сообщение отредактировал(а) SaDFromSpb - 8.10.2008, 17:16 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Это я не заметил. Я свое предыдущее сообщение отредактировал. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
не зняю
не вижу вариантов, когда енум должен сущствовать сам по себе (если это C++) т.е. любой енум есть составляющая какого-то класса да, может быть такое что в классе несколько енумов, но обычно их имена не пересекаються. по поводу если я захочу, я забью любое значение в любое место памяти, так что защищаться от этого нет смысла если человек пишет MyEnum me = static_cast<MyEnum>(20) значит он знает, что он делает (а если нет, то надо бить по рукам) Это сообщение отредактировал(а) korian - 8.10.2008, 20:28 |
|||
|
||||
SaDFromSpb |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Не хочу здесь об этом =). Да. В принципе, можно всегда делать енумы внутри классов... Правда, бывает, что целая группа классов равноправно разделяет какой-то енум, но это данному подходу - не преграда. =)
А че, спецификаторами доступа в классах тоже не пользуешься, что ли? А вообще это менее важный аспект из двух. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
||||
|
|||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
Lycifer |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
C++ не удобства, а язык с возможностями
А то как писать enum - это стиль программирования, поэтому это не недостаток!!! В С++ есть более плохие вещи которые распространяются на ошибка в самом языке. Пример: Все знаю что к закрытым полям класса нельзя получить доступ не из этого класса, но также при необходимости все получают!!!! это все пиши есчё(((( |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 3 Всего: 17 |
1. запихнуть его в неймспейс со всей этой третей частью 2. скорее всего из всей этой третей части, есть класс, которому этот колор нужен больше всего, а остальные его используют, т.к. работают с этим объектом. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |