如何“连接”boost :: mpl :: vectors

时间:2013-10-24 19:36:19

标签: c++ boost boost-mpl

我有不同的载体

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

我想将它们“连接”起来形成:

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

这将允许我准备矢量模板并在之后重复使用它们。 我的问题有不同的解决方案,但这种方法似乎对我来说最合适。

...谢谢

3 个答案:

答案 0 :(得分:7)

库本机支持的函数boost :: mpl :: joint_view可能是更好的选择。 它经过优化和惰性评估。

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

答案 1 :(得分: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;

答案 2 :(得分:2)

您可以使用mpl :: copy,它在内部使用mpl :: fold。

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>
    >
));