Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> extern и enum 
V
    Опции темы
Любитель
Дата 5.5.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(mes @  5.5.2009,  14:03 Найти цитируемый пост)
не совсем.. пример, где удобно применить переменную типа енум и это даст нам пользу.

mes, а чем в таком случае bool лучше чем int? В С++ слабое разделение типов зачастую (в плане разрешения неявного преобразования). Дело здесь в первую очередь не в функциональных возможностях, а в читаемости кода smile Я так думаю...


--------------------
PM MAIL ICQ Skype   Вверх
Riddik
Дата 5.5.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Есть прога, которая всё время крутит различные циклы. Циклы эти разные и между ними нужно переключаться время от времени. Я, конечно, новичок ещё тот, но лучше перечисления в этом случае ничего не вижу:
Код

enum {MAINLOOP, FISTLOOP,  HELPLOOP, PAUSE, EXIT} STATE;
...
//в главном цикле программы, который прокручивается всё время выполнения

switch(STATE)
{
case MAINLOOP:
             ...    //здесь когда нужно, значения STATE меняются, чтобы крутился другой цикл и т.д.

     break;
case FISTLOOP:
             ...    //здесь когда нужно, значения STATE меняются, чтобы крутился другой цикл и т.д. 
     break;
case HELPLOOP:
             ...  //здесь когда нужно, значения STATE меняются, чтобы крутился другой цикл и т.д.
     break;
case PAUSE:
             ...  //здесь когда нужно, значения STATE меняются, чтобы крутился другой цикл и т.д.
     break;
case EXIT: return 0;
}



PM MAIL   Вверх
azesmcar
Дата 5.5.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Пока лишь пример где такая переменная просто "транспортирует" значение - хотя может именно в этом и заключается ее смысл, а я предъявлял к ней большие требования

Вообще как было вами же сказано енумы имеют широкое и незаменимое применение в области метапрограммирования, но в данном контексте думаю да..смысл в этом smile

Цитата

не потеряет smile
Вот "исправленный" на скорую руку пример (хотя чего то в нем не хватает, но выполняет ту же задачу что и в приведенном Вами примеров, но без участия енума в логике. )

а ..мне казалось речь шла об этом
Код

struct mime_header
{
   std::string content_type;
   std::string content_disposition;
   int content_length;
};

smile тоже вариант
думаю это уже дело вкуса и предпочтений и стиля smile
еще раз спасибо.
было приятно пообщаться.
PM   Вверх
mes
Дата 5.5.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Любитель @  5.5.2009,  13:14 Найти цитируемый пост)
Дело здесь в первую очередь не в функциональных возможностях, а в читаемости кода smile Я так думаю... 

Вот вот. Когда я начал программировать, я возлагал на enum определенные надежды, но к сожалению, пришел к выводу,
что ограничение переменной по енум-типу в большинстве своем ограничивают динамику(что приводит к "порче" кода), не предоставляя существенных гарантий взамен.
(речь идет не о метапрограммировании). Поэтому у меня  выработалось условное правило, при котором логику программу разгружаю через более "надежные" языковые конструкции,
а енумами пользуюсь, только как набором констант. После этой дискуссии, я пришел к выводу, что все таки есть ряд задач, для решения которых применение енума облегчает логику, не создавая впечатления псевдобезопасности кода и проблем для поддержки и модификации.


Цитата(azesmcar @  5.5.2009,  13:21 Найти цитируемый пост)

а ..мне казалось речь шла об этом

 smile  smile 
Цитата(azesmcar @  5.5.2009,  13:21 Найти цитируемый пост)
думаю это уже дело вкуса и предпочтений и стиля smile

 smile 

Спасибо всем (особенно azesmcar), за то что помогли расставить мне мысли по полочкам. 
Для себя я на данном этапе с этим вопросом разобрался.







--------------------
PM MAIL WWW   Вверх
mes
Дата 5.5.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(Riddik @  5.5.2009,  13:16 Найти цитируемый пост)
Есть прога, которая всё время крутит различные циклы. Циклы эти разные и между ними нужно переключаться время от времени.Я, конечно, новичок ещё тот, но лучше перечисления в этом случае ничего не вижу:

Вот альтернативный  условный вариант (для опыта)
Код

class A
{
  public:
    A () : Current (&A::Main) {}
    bool Do ()
    {
        if (!Current) return false;

        (this->*Current) ();
        return true;
    }

  protected:
    void (A::*Current) ();

    void Main () { if (true) Current=&A::Any1; }
    void Any1 () { if (true) Current=&A::Any2; }
    void Any2 () { if (true) Current=NULL;     }
};

bool Run ()
{
    A a; while (a.Do());
}

разницу между этим вариантом и с кейз думаю показывать не требуется smile

Это сообщение отредактировал(а) mes - 5.5.2009, 15:14


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 5.5.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата

Циклы эти разные и между ними нужно переключаться время от времени

паттерн state поможет smile
PM   Вверх
Riddik
Дата 5.5.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



mes
azesmcar

спасибо, учту  smile 
PM MAIL   Вверх
xvr
Дата 5.5.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Есть еще 2 преимущества у переменной типа enum, правда они оба чисто human factor.
1) Использование enum в определении переменно явно показывает намерения автора
2) При использовании enum переменной дебагер может показывать для ее значений осмысленные идентификаторы (в любом случае это лучше, чем голые цифры)
Область - support & development

PM MAIL   Вверх
Любитель
Дата 5.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(xvr @  5.5.2009,  18:54 Найти цитируемый пост)
1) Использование enum в определении переменно явно показывает намерения автора

Вот это основной фактор. Всё остальное - частные случаи smile


--------------------
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.