|
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
|
|
Объединение std::function в контейнер13.09.2015, 22:48. Показов 3154. Ответов 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?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|