Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515

Объединение std::function в контейнер

13.09.2015, 22:48. Показов 3241. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во многих ЯП есть делегаты. В случае с С++ у нас в распоряжении есть std::function, им можно обернуть как и обычные функции, так и лямбды с функторами, при необходимости можно даже метод класса забиндить (правда этот placeholders..., неужели без него никак?). Однако, не хватает некоторого функционала, взять, например, делегаты из .NET. Из нескольких делегатов можно "сделать" MulticastDelegat, т.е. их можно объединять (складывать) и удалять одни делегаты из других (вычитать). Реализовывать подобный функционал (без использования std::function) я пробовал, получилось, работает, но очень не оптимально даже по сравнению с вектором из std::function (из-за аллокаций под полиморфные объекты-функторы). Решил просто сделать "врапер" над "std::vector<std::function<...>>". Добавляем, вызываем, всё ок. Но вот с удалением никак, вернее с поиском в векторе, так как std::function'ы не так просто сравнить. Как вариант, получить target'ы и сравнить, разыменовав указатели на функции. Работает, правда, только с простыми функциями (или с заранее объявленными ламбдами). Как же лучше сравнивать std::function?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.09.2015, 22:48
Ответы с готовыми решениями:

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

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Использование std::function в std::thread
Нужно вызвать function fnc в новом потоке. Как сделать? function &lt;void(vector&lt;char&gt;)&gt; fnc; void test(vector&lt;char&gt; data) { ...

20
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
15.09.2015, 09:49  [ТС]
Студворк — интернет-сервис помощи студентам
hoggy, с функциями, как писал, проблем не возникает, если лямбду объявить заранее и уже после забиндить, то и её по ссылке можно идетифицировать через target<FuncSig>(), а вот с функтором не получается, если забиндить Rvalue функтор, то тут безсмысленно искать концы (но это уже пусть конечный пользователь "делегата" думает), если передать ссылку на уже существующий функтор (std::ref(MyFunctor)), то метод target<FunctorClass>() вернёт ноль. Хотя в дебаге видно, что адрес функтора в std::function соответсвует функтору снаружи. Вот с объектом возвращаемым от std::bind(...) ещё сложнее, так как каждый раз будет создаваться новый функтор обёрнутый над методом класса с вызывающим объектом (нельзя просто залезть в него и сравнить две пары указателей).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.09.2015, 09:49

Std::function and std::vector
Как положить обёртки в вектор? Не используя библиотеку boost. function&lt;void(int)&gt; first_func() = one(); function&lt;void(int)&gt;...

Контейнер std::vector
Помогите определить почему не работает задача. Оибку выбивает на строку k.push_back(0); #include &lt;iostream&gt; #include...

Ассоциативный контейнер std::map с кириллицей
Всем привет! Никак не могу разобраться каким способом решить интересную проблему. В ассоциативном контейнере map&lt;string, string&gt;...

Как сделать свой контейнер совместимым с std::allocator?
Как сделать свой контейнер совместимым с std::allocator?

Используя контейнер std::list, получить заданные выражения
Используя стандартную библиотеку шаблонов STL и класс list по работе с двунаправленным списком, выполнить следующие задачу: Даны...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru