我正在努力学习boost fusion,但我不清楚zip_view和zip函数的结果之间的区别。
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
的文档,sequences
应该是fuz::vector<vec1&,vec2&>
。result_of::zip
似乎在内部使用vector2
而不是vector
,因此如果您在vec1
、vec2
和sequences
中使用vector2
,则类型似乎是相同的(实时示例)。希望更了解的人能给您一个更好的答案。 - llonesmizvector2
只是具有2个元素向量编号形式的表述。vector
则是可变参数形式。我的理解是,result_of::zip<vec1, vec2>::type
将使用向量的编号形式,而zip_view
将使用给定序列的类型,因此在这里:向量的可变参数形式(vector<vec1&, vec2&>
)。 - Laurent