![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
для функтора поставил многоточие, потому что зависит от того, какой концепт вы выбирете для него.. можно, например, ограничить функторы наследованных от интерфейса, тогда в последний нужно будет добавить виртуальную функцию клонирования..
либо прибегнуть к помощи шаблонов и организовать привязку.. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
итого , самый простой способ:
описать базовый функтор, от которого отнаследовать адаптер для простой функции. все остальные функторы должны наследоваться от этой базы.. базовый функтор должен уметь быть клонированым, что будет использовано оберткой для успешного копирования.. помимо этого можно добавить старатегию хранения : обьект посредник, между оберткой и нтерфейсом, который выбирает перемещать ли интерфейс, или клонировать.. это поможет выбирать по ссылке ли передовать функтор или по значению.. |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Размышляя над моей текущей ситуацией по поводу обработки ошибок в моих проектах, которая привела к этому топику и мне кажется ее можно решить куда изящней. Поэтому поставлю задачу несколько по другому, чтобы увидеть мнение других разработчиков на С++.
Условия задачи:
Суть задачи: Придумать способ обработки ошибок в коде класса парсера CustomFormatParser и при этом дать возможность пользователю класса влиять на выбор стратегии обработки, одну из следующих двух:
Мои мысли привели к тому что : Надо реализовывать Event-driven , т.е. вариант обработки ошибки с использованием callback-функции в качестве обработчика ошибки. Реализовать обработчик ошибки по умолчанию, задаваемый в конструкторе класса парсера как параметр по умолчанию. Затем в коде класса парсера вызывается обработчик ошибки, который задан по умолчанию или реализован и передан пользователем в параметре конструктора. Этот обработчик возвращает статус : "продолжить работу дальше или нет?" имея подобный ответ мы либо бросаем исключение, либо продолжаем работу парсера дальше, но запоминаем информацию об ошибке. Но возможно решение принятое мною не особо и красиво, хочется увидеть мысли других. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Диктуется причинами. Чаще пишу такие типы приложений когда работа с попорченным файлом не имеет смысла. Но есть и другие типы приложений, которые анализируют и выдают информацию о файле им-то как раз и нужно чтобы приложение работало дальше даже с попорченным файлом |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
это если простой вариант с возвращением статуса окончания операции не подходит.
почему эта стратегия должна быть частью логики парсера ? продолжение работы после исключения - это никак не внутренняя ответственность обьекта, именнуемого парсер.. спецификация постановки вопроса ограничивает детализацию ответа.. Вы спрашиваете не о решение задачи как таковом, а о том, как притянуть то, что Вам хочется, но, чтоб получилось как оно всем надо.. ![]() Это сообщение отредактировал(а) mes - 27.12.2012, 21:13 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |