boost :: fusion :: zip函数vs boost :: fusion :: zip_view

时间:2013-11-25 15:15:02

标签: c++ boost 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功能似乎非常密切相关,但我不这样做 看看何时/为什么使用视图而不是函数。

1 个答案:

答案 0 :(得分:3)

我希望我能回答您的第二个问题(为什么使用zip_view代替zip)。

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

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

因此,zip_view允许zip不支持的内容:

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