2013-10-24 8 views
8

ich verschiedene VektorenWie "verketten" boost :: mpl :: Vektoren

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

Ich möchte "verketten" haben, sie zu bilden:

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

Diese mir erlauben würde, um Vektorvorlagen vorzubereiten und sie anschließend wiederzuverwenden. Es gibt verschiedene Lösungen für mein Problem, aber dieser Ansatz scheint mir am geeignetsten zu sein.

Dank ...

Antwort

3

So:

// 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; 
+0

Ich bin nicht sicher, aber ich denke, dass first_type und second_type geschaltet werden. Wenn ich mich nicht irre, wirst du 'vector ' bekommen. – llonesmiz

+0

@cv_and_he [Rechts] (http://www.boost.org/doc/libs/1_54_0/libs/mpl/doc/refmanual/back-inserter.html), ich gab einfach nicht Wert auf die Ordnung Typen . –

+0

Danke, dieser Code macht den Job. Obwohl in meinem Fall dieses Verfahren eine große Menge an Speicher bei der Kompilierung verbraucht ... – Kikosha

2

Sie mpl verwenden können :: Kopie, die mpl verwendet :: intern falten.

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

Vielen Dank für die Antwort, funktioniert diese – Kikosha

+0

Online-Demo: http://coliru.stacked-crooked.com/a/50d3d9b6707cd457 –