2013-10-24 24 views
8

我有不同的向量如何 「串聯」 的boost :: MPL ::向量

mpl::vector<Type1, Type2...> 
mpl::vector<Type3, Type4...> 

我想 「串聯」 起來,形成:

mpl::vector<Type1, Type2, Type3, Type4...> 

這將使我準備矢量模板並在之後重新使用它們。 我的問題有不同的解決方案,但這種方法似乎最適合我。

謝謝...

回答

3

像這樣:

// include the appropriate headers 
typedef mpl::vector<Type1, Type2> first_type; 
typedef mpl::vector<Type3, Type4> second_type; 
typedef mpl::copy<first_type::type, mpl::back_inserter<second_type> >::type concat_type; 
+0

我不確定,但我認爲first_type和second_type被切換。如果我沒有錯,你會得到'vector '。 – llonesmiz

+0

@cv_and_he [右](http://www.boost.org/doc/libs/1_54_0/libs/mpl/doc/refmanual/back-inserter.html),我只是沒有重視類型的順序。 –

+0

謝謝,這段代碼完成了這項工作。雖然在我的情況下,這種方法在編譯時會消耗大量的內存...... – Kikosha

2

您可以使用MPL ::複製,它採用MPL ::內部倍。

typedef mpl::vector<T0, T1> s0; 
typedef mpl::vector<T2, T3> s1; 
typedef mpl::copy< 
    s1, 
    mpl::back_inserter<s0> 
>::type concatenated; 

BOOST_MPL_ASSERT((
    mpl::equal< 
     concatenated, 
     mpl::vector<T0, T1, T2, T3> 
    > 
)); 
+0

謝謝你的回答,這個作品 – Kikosha

+0

在線演示:http://coliru.stacked-crooked.com/a/50d3d9b6707cd457 –

相關問題