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

8

我有两个不同的向量

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

我想要将它们“连接”起来形成:
mpl::vector<Type1, Type2, Type3, Type4...>

这将使我能够准备向量模板并之后重复使用它们。针对我的问题,有不同的解决方案,但这种方法似乎最为合适。
谢谢...
3个回答

7

运行得非常好!而且它不会使编译所需的虚拟内存爆炸。非常感谢! - Kikosha

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;

我不确定,但我认为first_type和second_type被交换了。如果我没错的话,你会得到vector<Type3,Type4,Type1,Type2> - llonesmiz
@cv_and_he 对,我只是没有重视类型的顺序。正确链接 - Igor R.
谢谢,这段代码完成了任务。虽然在我的情况下,此方法在编译时消耗了大量内存... - Kikosha
@Kikosha 嗯,模板元编程需要大量的编译时间资源,特别是在 MSVC 中。 - Igor R.

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接