Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to "concatenate" boost::mpl::vectors

I have to different vectors

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

I'd like to "concatenate" them to form:

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

This would allow me to prepare vector templates and reuse them afterwards. There are different solutions to my problem, but this approach seems most appropriate to me.

Thanks...

like image 211
Kikosha Avatar asked Oct 24 '13 19:10

Kikosha


3 Answers

The libaray native supported function boost::mpl::joint_view is probably a better choice. It is optimized and lazy-evaluated.

http://www.boost.org/doc/libs/1_55_0/libs/mpl/doc/refmanual/joint-view.html

like image 83
qduyang Avatar answered Oct 26 '22 12:10

qduyang


Like this:

// 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;
like image 21
Igor R. Avatar answered Oct 26 '22 11:10

Igor R.


You can use mpl::copy, which uses mpl::fold internally.

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>
    >
));
like image 21
Madera Avatar answered Oct 26 '22 12:10

Madera