我正在努力学习增强融合,但我并不清楚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功能似乎非常密切相关,但我不这样做 看看何时/为什么使用视图而不是函数。
答案 0 :(得分:3)
我希望我能回答您的第二个问题(为什么使用zip_view
代替zip
)。
问题是zip
生成一系列元组,其中包含对拉链序列的各个元素的常量引用。在您的示例中,它是vector2<const int&, const char&>
相反,zip_view
为每个元素生成的元组中的引用与视图构造函数中的压缩序列具有相同的const限定符。在您的情况下,它将是vector<int&, char&>
。
因此,zip_view
允许zip
不支持的内容: