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
определенно недопустимый синтаксис, и даже если бы он был, это не имело бы смысла, потому что оно не привязано к функции.