Russian Qt Forum
Ноябрь 22, 2024, 23:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Делегаты С++ в классах-наследниках  (Прочитано 16247 раз)
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #30 : Декабрь 29, 2014, 21:04 »

Да, с bind хорошо. А вот этот сам "объект-функтор" - он "физически" существует, или это темплейт-подстава? (наверное подстава). Напр нет С++ 11, как самостоятельно получить тот же ф-ционал? (просто с целью уяснить)

Делегаты наподобие std::function можно завелосипедить самостоятельно.
Это не сложно.

Некоторое время назад, я изготавливал собственные велосипеды для с++03.

Только у меня использовалась связка: динамика и статика.

Статика работает по такому же принципу, что и std::function.
Скорость вызова - такая же.
Скорость бинда на порядок (в десять раз) быстрее, чем у стандартного аналога.

Динамика работает на два порядка медленнее (в 100 раз дольше).


Дизайн такой:

Код:
TConnector<R(int)> tcon(obj, &Some::Method);

//--- обратите внимание: динамический делегат не является продуктом шаблона
Connector con(obj, &Some::Method);

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

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

Если вам это интересно, то мы можем подробно разобрать рецепт изготовления в рамка с++03.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #31 : Декабрь 30, 2014, 12:59 »

Спасибо m_ax за доходчивый пример. Все хорошо кроме того что используются шаблоны, т.к. базовый класс у меня находится в отдельной библиотеке DLL, но вписав метод register_delegate в тело класса все собралось и заработало! Спасибо всем за пояснения, потому что честно говоря я с шаблонами не совсем дружу и редко их использую, а тут еще мудреные function bind ...  В замешательстве
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #32 : Декабрь 30, 2014, 13:40 »

//--- обратите внимание: динамический делегат не является продуктом шаблона

Если вам это интересно, то мы можем подробно разобрать рецепт изготовления в рамка с++03.
Да, интересно (не представляю как/куда Вы спрячете тип). А без (долбаных) шаблонов - вообще прекрасно!

Спасибо
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #33 : Декабрь 30, 2014, 21:32 »

Цитировать
Да, интересно (не представляю как/куда Вы спрячете тип).
А про полиморфизм не слышали?

Цитировать
А без (долбаных) шаблонов - вообще прекрасно!
И (долбаные) шаблоны там всё равно будут.. И откуда такие комплексы по поводу них?)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.164 секунд. Запросов: 22.