Пример Boost.org для fusion :: transform выглядит следующим образом:
struct triple
{
typedef int result_type;
int operator()(int t) const
{
return t * 3;
};
};
// ...
assert(transform(make_vector(1,2,3), triple()) == make_vector(3,6,9));
И все же я не "понимаю". Вектор в их примере содержит элементы одного и того же типа, но основной смысл использования слияния - это контейнеры разнородных типов. Что если бы они использовали make_vector(1, 'a', "howdy")
вместо этого?
int operator()(int t)
должен был бы стать
template<typename T> T& operator()(T& const t)
Но как бы я написал тип result_type? template<typename T> typedef T& result_type
определенно не является допустимым синтаксисом, и он не имеет смысла, даже если бы он был, потому что он не привязан к функции.