我很努力地学习 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函数似乎密切相关,但我不知道
    查看何时/为什么使用 View 而不是函数。
  • 最佳答案

    希望我能回答您的第二个问题(为什么要使用zip_view而不是zip)。

    问题在于zip生成一个元组序列,其中包含对压缩序列的各个元素的常量引用。在您的示例中,它是vector2<const int&, const char&>
    相反,由zip_view为每个元素生成的元组中的引用与 View 构造函数中的压缩序列具有相同的const限定符。您的情况将是vector<int&, char&>

    结果,zip_view允许zip不支持的内容:

  • 修改压缩序列元素;
  • 选择要修改的序列。
  • 09-07 06:00