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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> наследование от классов STL 
V
    Опции темы
volatile
Дата 19.2.2011, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(mes @  19.2.2011,  01:26 Найти цитируемый пост)
структура кода та же, а еще приходится глазами выискавать метку

Ну метку заметить не трудно.  smile гораздо труднее понять зачем там свитч.
Ну да ладно... smile 
PM MAIL   Вверх
boostcoder
Дата 19.2.2011, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



задавался подобным вопросом, возможно на этом форуме, не помню.. но, как результат, все равно реализую string_list и string_vector унаследовав list или vector соответственно. ничего плохого в этом нет.

Добавлено через 58 секунд
goto - да. сложно представить ситуацию, когда он нужен. в жизни такой надобности не встречал в с++.

PM WWW   Вверх
azesmcar
Дата 19.2.2011, 07:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



volatile
Ну вообще-то goto здесь не так напрашивался. В твоем примере goto вообще непонятно зачем нужен.
Я вот это имел ввиду.
Код

template <typename M1, typename M2, typename M3, typename M4, typename M5>
bool try_lock_without_deadlock(M1& m1, M2& m2, M3& m3, M4& m4, M5& m5)
{
    if (!m1.try_lock()) goto rollback0;
    if (!m2.try_lock()) goto rollback1;
    if (!m3.try_lock()) goto rollback2;
    if (!m4.try_lock()) goto rollback3;
    if (!m5.try_lock()) goto rollback4;
    return true;
rollback4:
    m4.unlock();
rollback3:
    m3.unlock();
rollback2:
    m2.unlock();
rollback1:
    m1.unlock();
rollback0:
    return false;
}

Хотя второй switch любой уважающий себя компилятор и преобразует в таблицу переходов, первая часть все таки имеет небольшой overhead при инкрементировании счетчика. Так-что с goto выйдет чуточку быстрее.
Несмотря на то, что я сделал через switch, я думаю это хороший пример, когда goto действительно является неплохим решением.
PM   Вверх
mes
Дата 19.2.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(volatile @  19.2.2011,  01:04 Найти цитируемый пост)
Ну метку заметить не трудно.   гораздо труднее понять зачем там свитч.

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


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


hell is here
**


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

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



Цитата(boostcoder @  19.2.2011,  02:35 Найти цитируемый пост)
string_list и string_vector унаследовав list или vector соответственно. ничего плохого в этом нет.

чем это лучше будет std::list<std::string> > и std::vector<std::string> >
одновременное наследование в этом случае этож ужостъ, хотя бы по колву одинаковых методов в обоих классах

Добавлено через 1 минуту и 30 секунд
уж что угодно лучше было бы агрегировать std::list<std::string> или наследовать в новый класс
PM MAIL   Вверх
baldina
Дата 19.2.2011, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



mes, goto поможет при выходе из глубоко вложенного цикла. 
того же можно достичь исключениями, но не дело использовать исключения в структурных целях
менее очевидное применение - войти в середину вложенного цикла с некоторыми не начальными значениями параметров. например, мы не закончили обработку, а потом хотим продолжить с того же места
...
Цитата(borisbn @  18.2.2011,  09:53 Найти цитируемый пост)
ok, насколько я понял, если пишешь не универсальную библиотеку, а так... программку однодневку, если в принципе не представляешь, как этот код можно повторно использовать в другом месте, и если точно знаешь, что делаешь, то в наследовании для расширения функционала нет ничего криминального, что действительно повлияет на работу программы, и даже на её поддержку. Во всех остальных случаях целесообразно писать свободные функции.

все-таки все немного глубже. 
1. если программа будет развиваться, сопровождаться и т.д., уменьшение связей (зависимостей) упростит жизнь.
2. наследование (по сравнению со свободной функцией) носит более специфический характер, т.к. не просто решает еще одну задачу, а является результатом проектных обобщений.
3. самовоспитание. если привыкнуть что-то делать правильно, меньше надо будет напрягаться в случаях, когда "делать правильно" следует обязательно
PM MAIL   Вверх
mes
Дата 19.2.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(baldina @  19.2.2011,  18:01 Найти цитируемый пост)
 goto поможет при выходе из глубоко вложенного цикла. 

 smile, я в курсе.. и я не противник goto, но сторонник применения альтернативных и не "очевидных" методов..
П.С. если идут на пользу, а не просто потому что "где-то увидел что так надо"..   smile 

Цитата(baldina @  19.2.2011,  18:01 Найти цитируемый пост)
того же можно достичь исключениями, но не дело использовать исключения в структурных целях

ну это уже извращение, по воробьям из пушки.. smile

Цитата(baldina @  19.2.2011,  18:01 Найти цитируемый пост)
самовоспитание. если привыкнуть что-то делать правильно, меньше надо будет напрягаться в случаях, когда "делать правильно" следует обязательно 

 smile 

P.S. "правильно" - это значит создавать как можно меньше потенциальных проблем smile




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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(baldina @  19.2.2011,  20:01 Найти цитируемый пост)
того же можно достичь исключениями, но не дело использовать исключения в структурных целях

  А я использую, причем часто генерю строковое исключение (LPCWSTR) . Удобно можно сразу текст ошибки указать. Либо исключение с кодом. На сегодняшний день это нормально. Даже lexical_cast<> генерит как результат неуспеха.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
mes
Дата 20.2.2011, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Alexeis @  20.2.2011,  14:40 Найти цитируемый пост)
 А я использую, причем часто генерю строковое исключение (LPCWSTR) . Удобно можно сразу текст ошибки указать. Либо исключение с кодом. На сегодняшний день это нормально. Даже lexical_cast<> генерит как результат неуспеха. 

ммм.. только вот как связано "результат неуспеха" и "выход из вложенного цикла" ?!
 smile 




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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(azesmcar @  19.2.2011,  07:19 Найти цитируемый пост)
volatile
Ну вообще-то goto здесь не так напрашивался. В твоем примере goto вообще непонятно зачем нужен.

azesmcar, ну первый свитч сбивает с толку просто.
Ну и mes сказал чтобы с гото было.  smile 
Я бы это вообще вот так написал.
Код

template <typename M1, typename M2, typename M3, typename M4, typename M5>
bool try_lock_without_deadlock(M1& m1, M2& m2, M3& m3, M4& m4, M5& m5)
{
   if (m1.try_lock())
   {
      if (m2.try_lock())
      {
         if (m3.try_lock())
         {
            if (m4.try_lock())
            {
               if (m5.try_lock())
                  return true;
               m4.unlock();
            }
            m3.unlock();
         }
         m2.unlock();
      }
      m1.unlock();
   }
   return false;
}

Хотя это все дело вкуса, конечно.


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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



mes, ну досрочный выход из вложенного цикла это часто какой-то результат. Положительный или отрицательный. Исключение это не обязательно крах. Это вполне может быть отрицательный результат проверки. Иногда удобно положительный результат выводить как исключение. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
azesmcar
Дата 20.2.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(volatile @  20.2.2011,  16:02 Найти цитируемый пост)
Я бы это вообще вот так написал.

а если мьютексов 10?
PM   Вверх
volatile
Дата 20.2.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(azesmcar @  20.2.2011,  16:07 Найти цитируемый пост)
а если мьютексов 10? 

ну в примере 5 было. В любом случае с десятью goto тоже не шоколадно.
Если десять, двадцать и более, вероятно сделала бы что-то типа небольшого класса, включающего указатель на мьютекс.
в конструкторе try_lock(), в деструкторе, еслио золочен unlock();


Это сообщение отредактировал(а) volatile - 20.2.2011, 16:27
PM MAIL   Вверх
mes
Дата 20.2.2011, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Alexeis @  20.2.2011,  15:04 Найти цитируемый пост)
Исключение это не обязательно крах. Это вполне может быть отрицательный результат проверки

да это не крах.. исключение это не отрицательный, а непредвиденный случай проверки  smile

Добавлено через 3 минуты и 29 секунд
Цитата(Alexeis @  20.2.2011,  15:04 Найти цитируемый пост)
Иногда удобно положительный результат выводить как исключение.  

 smile 



--------------------
PM MAIL WWW   Вверх
Abyx
Дата 20.2.2011, 22:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



исключения С++ слишком медленные, чтобы использовать их иначе кроме как в исключительных ситуациях.
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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