Я мучительно пытаюсь научиться ускорению слияния, и я не понимаю четко различий между zip_view и результатом zip-функции.boost :: fusion :: zip function vs boost :: fusion :: zip_view
namespace fuz = boost::fusion;
typedef fuz::vector<int,int> vec1;
typedef fuz::vector<char,char> vec2;
typedef fuz::vector<vec1&, vec2&> sequences;
typedef fuz::zip_view<sequences> zip_view_type;
typedef fuz::result_of::zip<vec1, vec2>::type zip_result_type;
BOOST_MPL_ASSERT((boost::is_same<zip_view_type, zip_result_type>));
Я ожидал, что два типа такой же, но они не являются. Зачем?
zip_view и функция zip, кажется, очень тесно связаны, но я не знаю Посмотрите, когда/почему использовать представление вместо функции.
Согласно документации 'zip_view',' sequence' должно быть 'fuz :: vector'. 'result_of :: zip', кажется, использует' vector2' вместо 'vector' внутри, поэтому, если вы используете' vector2' в 'vec1',' vec2' и 'sequence', типы кажутся одинаковыми ([live example] (http://coliru.stacked-crooked.com/a/e2bc2f794e33c64c)). Надеюсь, кто-то, кто знает больше, даст вам лучший ответ. –
llonesmiz
@cv_and_he: thx, по крайней мере, ваш живой пример демонстрирует diff. Я также попытался использовать type_info, но с g ++ (даже с демензированием имени) вывод был слишком загадочным. Я также исправлю последовательности typedef в моем вопросе. – Laurent
Ok 'vector2' - это просто пронумерованная форма из двух элементов. 'vector' - это вариационная форма. Здесь я понимаю, что 'result_of :: zip :: type' будет использовать нумерованную форму вектора, а zip_view будет использовать тип данной последовательности, таким образом, здесь: вариационная форма вектора (' vector '). –
Laurent