|
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
|
|
| 13.09.2015, 22:48 | |
|
Ответы с готовыми решениями:
20
Какая реализация лучше? std::pointer_to_binary_function vs std::function Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? Использование std::function в std::thread |
|
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
|
|
| 15.09.2015, 09:49 | |
|
Как сделать свой контейнер совместимым с std::allocator?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программное добавление префикса в нумерацию документов
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й колонке просто выдумал. .
Это. . .
|