Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
#1

Чем boost::signal отличается от std::function - C++

24.02.2017, 20:11. Просмотров 254. Ответов 6
Метки нет (Все метки)

Чем boost::signal отличается от std::function ?
http://www.cyberforum.ru/cpp-beginners/thread1618702.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2017, 20:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чем boost::signal отличается от std::function (C++):

Какая реализация лучше? std::pointer_to_binary_function vs std::function
Какая реализация (set_p или set_f) лучше /современнее / эффективнее ?...

Использование std::function в std::thread
Нужно вызвать function fnc в новом потоке. Как сделать? function...

mingw32, SEH, std::exception, setjmp/longjmp, signal
Начал разбираться с вопросом - как понял - есть несколько вариантов: (в порядке...

Std::function and std::vector
Как положить обёртки в вектор? Не используя библиотеку boost....

В чем отличия между std::cref() и std::bind()?
В документации не понял, что делает bind() ? И чем отличается cref() от...

6
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
24.02.2017, 20:15 #2
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Чем boost::signal отличается от std::function ?
boost::signals - не рекомендуется к использованию.
Boost.Signals is no longer being actively maintained. Do not use Boost.Signals for new development (use Boost.Signals2 instead). If you have existing Boost.Signals-based code, it will continue to work, but consider moving to Boost.Signals2. There is a porting guide in the Signals2 documentation.

Например, на boost::signals2 можно
навесить несколько функторов,
имеется группировка функторов,
да и вообще, обо всём написано в доках же.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
24.02.2017, 20:25  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
boost::signals - не рекомендуется к использованию
не успел вникнуть, а уже отменили

Цитата Сообщение от Croessmah Посмотреть сообщение
Например, на boost::signals2 можно
навесить несколько функторов,
имеется группировка функторов,
Я к этому и клоню, что signal является врапером для удобной работы с функторами, абсолютно схожих результатов можно добиться с std::function или их массивом.

Или я что-то не уследил и есть у сигнала, то что не решить с помощь std::function или врапера над ним.
0
hoggy
Заблокирован
24.02.2017, 23:28 #4
Лучший ответ Сообщение было отмечено rikimaru2013 как решение

Решение

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
signal является врапером для удобной работы с функторами
аха.
ближайший аналог слотов/сигналов, как в qt.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
абсолютно схожих результатов можно добиться с std::function или их массивом
аха. только обертка получится достаточно толстая.
этакие сигналы3))

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

делаем connection членом класса,
и указываем какой метод классу нужно дергать,
и в итоге получаем достаточно надежную,
и быструю модель слот/сигнал
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
24.02.2017, 23:40  [ТС] #5
Цитата Сообщение от hoggy Посмотреть сообщение
суть в том, что есть некоторое количество потребителей,
которых мы хотим подключить к одному и тому же сигналу.
указываем, что нужно дернуть у потребителя,
и получаем connection.
пока connection живое, потребитель будет получать сигнал.
как только connection дисконектнеццо,
или разрушится (позовет disconnect в диструкторе),
соединение автоматически разорвётся.
делаем connection членом класса,
и указываем какой метод классу нужно дергать,
и в итоге получаем достаточно надежную,
и быструю модель слот/сигнал
Кажись всё понял, но всё же - почему этого не добиться std::function ?
0
hoggy
Заблокирован
24.02.2017, 23:55 #6
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Кажись всё понял, но всё же - почему этого не добиться std::function ?
попробуйте сделать.
с возможностью коннекта/дисконнекта,
в качестве получателя можно указывать не только методы классов,
но и всякие лямбды.
1
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
25.02.2017, 09:48 #7
rikimaru2013, по той же причине,
по которой Вы хотите использовать std::function,
а не велосипедить с нуля всё.
Кликните здесь для просмотра всего текста
2
25.02.2017, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2017, 09:48
Привет! Вот еще темы с решениями:

Почему std::string_view МЕДЛЕННЕЕ, чем std::string?
Всем привет! Нужно найти количество уникальных строк в больших текстовых...

Конфликты boost и std
Доброго времени суток. Пишу проект с использованием сторонних либ boost и...

Вихрь Мерсенна в std и boost
Есть ли разница в этих алгоритмах? boost::mt19937 gen(time(0));...

Одинаковое время поиска boost::unrdered_map vs std::map
Почемуто получаю одинаковое время на поиск как между контейнерами так и от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru