Компоненты для вызова функций и функциональных объектов и для вызова кода Fusion через интерфейс объекта функции.
#include <boost/fusion/functional.hpp>
Что такое вызов функции?
f (a,b,c)
Это имя и кортеж, написанные рядом друг с другом, слева направо.
Хотя синтаксис C++ не позволяет заменить<(a,b,c)
>некой FusionSequence, введение ещё одной функции обеспечивает решение:
invoke(f,my_sequence)
Альтернативно можно применить простое преобразование к<f
>для достижения того же эффекта:
f tuple <=> f' (tuple)
Сейчас,<f'
>является унарной функцией, которая принимает аргументы к<f
>в качестве кортежа;<f'
>являетсяслитойформой<f
>. При чтении приведенной выше эквивалентности справа налево, чтобы получить обратное преобразование,<f
>являетсянесвязаннойформой<f'
>.
Наличие общего кода C++ возвращает произвольные функции, предоставляемые клиентом, когда-то было очень повторяющейся задачей, поскольку различные функции могут отличаться по аритмии, синтаксису вызова и другим свойствам, которые могут быть частью типа. Перенос аргументов в виде последовательностей Fusion и факторинг вызова делает алгоритмы Fusion применимыми к аргументам функции, а также сводит проблему к одному синтаксису вызова и фиксированной частоте (вместо произвольного числа произвольных аргументов умножает несколько синтаксических вариантов умножает дополнительные свойства).
Преобразование несвязанной функции в ее слитый аналог позволяет n-ary вызывать вызовы из алгоритма, который вызывает унарный вызов.Объект полиморфной функциис аргументамиПоследовательности.
Библиотека предоставляет несколько шаблонов функций для вызова различных типов функций и адаптеров для преобразования их в слитую форму, соответственно. Каждый вариант имеет соответствующий шаблон функции генератора, который возвращает пример адаптера для данного аргумента.
Конструкторы можно назвать применяющимиBoost.Functional/Factory.
Преобразование слитой функции в ее неслитый аналог позволяет создавать функциональные объекты для принятия произвольных вызовов. Другими словами, унарный функциональный объект может быть реализован вместо (возможно, сильно перегруженных) шаблонов функций или операторов вызовов функций.
Библиотека предоставляет как строго типизированный, так и общий вариант этого преобразования. Последний следует использовать в сочетании сBoost.Functional/Forwardдля атакиПередающая проблема.
Оба варианта имеют соответствующий шаблон функции генератора, который возвращает пример адаптера для данного аргумента.