Boost.org-х example приведены для слияния :: преобразования выглядит следующим образом:Как использовать boost :: fusion :: преобразовать гетерогенные контейнеры?
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
, конечно, недействителен синтаксис, и это не имело бы смысла, даже если бы оно было, потому что оно не привязано к функции.
Вы уверены, что result_type требуется, а не потому, что парень любит поставить его там? В приведенном выше примере он, как представляется, использует примитивную форму decltype для формирования типа результата. – Puppy
ugh, вы правы, это не требуется. Благодарю. Я собираюсь опубликовать новый вопрос с просьбой дать реальное руководство для boost :: fusion, эта документация на boost.org - это всего лишь шаг над чтением самого кода .. Grrr. – Kyle