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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как передать функтор в метод ждущий указатель? Неужели только static-методом? 
:(
    Опции темы
mes
Дата 9.12.2012, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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



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


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


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

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



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



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


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Размышляя над моей текущей ситуацией по поводу обработки ошибок в моих проектах, которая привела к этому топику и мне кажется ее можно решить куда изящней. Поэтому поставлю задачу несколько по другому, чтобы увидеть мнение других разработчиков на С++.

Условия задачи:
  •  Нет груза наследия прошлого в виде уже имеющихся проектов.
  •  Код нужно писать исключительно на С++.
  •  Производительность кода имеет значение.

Суть задачи:
  Придумать способ обработки ошибок в коде класса парсера CustomFormatParser и при этом дать возможность пользователю класса влиять на выбор стратегии обработки, одну из следующих двух:
  •  По умолчанию при обнаружении ошибки бросается исключение
  •  При обнаружении ошибки операция завершается, но информация о типе ошибки сохраняется с возможностью дальнейшего ее получения

Мои мысли привели к тому что :
  Надо реализовывать Event-driven , т.е. вариант обработки ошибки с использованием callback-функции в качестве обработчика ошибки.
Реализовать обработчик ошибки по умолчанию, задаваемый в конструкторе класса парсера как параметр по умолчанию. Затем в коде класса парсера вызывается обработчик ошибки, который задан по умолчанию или реализован и передан пользователем в параметре конструктора. Этот обработчик возвращает статус : "продолжить работу дальше или нет?" имея подобный ответ мы либо бросаем исключение, либо продолжаем работу парсера дальше, но запоминаем информацию об ошибке.

Но возможно решение принятое мною не особо и красиво, хочется увидеть мысли других.
PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 27.12.2012, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



EvilsInterrupt
Цитата(EvilsInterrupt @  26.12.2012,  22:52 Найти цитируемый пост)
дать возможность пользователю класса влиять на выбор стратегии обработки

диктуется объективными причинами, или это просто желание сделать в более общем виде?

PM MAIL   Вверх
EvilsInterrupt
Дата 27.12.2012, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

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



Цитата

диктуется объективными причинами, или это просто желание сделать в более общем виде?

Диктуется причинами. Чаще пишу такие типы приложений когда работа с попорченным файлом не имеет смысла. Но есть и другие типы приложений, которые анализируют и выдают информацию о файле им-то как раз и нужно чтобы приложение работало дальше даже с попорченным файлом
PM MAIL WWW ICQ Jabber   Вверх
mes
Дата 27.12.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(EvilsInterrupt @  26.12.2012,  21:52 Найти цитируемый пост)
 Надо реализовывать Event-driven

это если простой вариант с возвращением статуса окончания операции не подходит.

Цитата(EvilsInterrupt @  26.12.2012,  21:52 Найти цитируемый пост)
Этот обработчик возвращает статус : "продолжить работу дальше или нет?" имея подобный ответ мы либо бросаем исключение

почему эта стратегия должна быть частью логики парсера ?  продолжение работы после исключения - это никак не внутренняя ответственность обьекта, именнуемого парсер..

спецификация постановки вопроса ограничивает детализацию ответа.. Вы спрашиваете не о решение задачи как таковом, а о том, как притянуть то, что Вам хочется, но, чтоб получилось как оно всем надо.. smile

Это сообщение отредактировал(а) mes - 27.12.2012, 21:13


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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