8

私は異なるベクトルを持っている必要があります

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

それらを「連結」して次のようにしたいと思います。

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

これにより、ベクター テンプレートを準備し、後で再利用することができます。私の問題にはさまざまな解決策がありますが、このアプローチが私に最も適しているようです。

ありがとう...

4

3 に答える 3

7

libaray ネイティブでサポートされている関数 boost::mpl::joint_view は、おそらくより良い選択です。最適化され、遅延評価されます。

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

于 2013-11-18T14:41:25.270 に答える
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;
于 2013-10-24T19:54:51.377 に答える
2

内部で mpl::fold を使用する mpl::copy を使用できます。

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>
    >
));
于 2013-10-25T12:38:36.013 に答える