3
我很痛苦地試圖學習boost融合,我不明白zip_view和zip函數的結果之間的區別。boost :: fusion :: zip函數vs boost :: fusion :: zip_view
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'。 'result_of :: zip'似乎在內部使用'vector2'而不是'vector',所以如果你在'vec1','vec2'和'sequences'中使用'vector2',那麼類型看起來是相同的([live example] (http://coliru.stacked-crooked.com/a/e2bc2f794e33c64c))。希望有人知道更多會給你一個更好的答案。 –
llonesmiz
@cv_and_he:thx,至少你現場的例子演示了diff。我也嘗試過使用type_info,但是使用g ++(即使名稱爲demangling),輸出也太神祕了。我也將更正我的問題中的序列typedef。 – Laurent
Ok'vector2'只是2個元素向量的編號形式。 'vector'是可變形式。我在這裏理解的是'result_of :: zip :: type'將使用矢量的編號形式,並且zip_view將使用給定序列的類型,因此在這裏:vector的可變形式('vector
Laurent