Question

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...

Was it helpful?

Solution

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

OTHER TIPS

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;

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>
    >
));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top