boost::fusion::zip function vs boost::fusion::zip_view

boost::fusion::zip function vs boost::fusion::zip_view

本文关键字:boost zip fusion view vs function      更新时间:2023-10-16

我很痛苦地试图学习boost融合,但我不清楚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而不是zip)。

问题是zip生成一个元组序列,该元组序列包含对压缩序列的各个元素的常量引用。在您的示例中,它是vector2<const int&, const char&>

相反,zip_view为每个元素生成的元组中的引用具有与视图构造函数中的压缩序列相同的常量限定符。你的情况是vector<int&, char&>

因此,zip_view允许zip不支持的东西:

  1. 压缩序列元素的修改
  2. 选择要修改的序列