2013-10-24 17 views
8

devo diversi vettoriCome "concatenate" boost :: :: MPL vettori

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

mi piacerebbe "concatenate" loro di formare:

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

Questo mi avrebbe permesso per preparare modelli vettoriali e riutilizzarli in seguito. Ci sono diverse soluzioni al mio problema, ma questo approccio mi sembra il più appropriato.

Grazie ...

risposta

3

Ti piace questa:

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

non sono sicuro, ma penso che first_type e second_type sono accesi. Se non sbaglio, otterrai 'vector '. – llonesmiz

+0

@cv_and_he [Right] (http://www.boost.org/doc/libs/1_54_0/libs/mpl/doc/refmanual/back-inserter.html), non ho dato importanza ai tipi 'ordine . –

+0

Grazie, questo codice fa il lavoro. Anche se nel mio caso questo metodo consuma un'enorme quantità di memoria al momento della compilazione ... – Kikosha

2

È possibile utilizzare mpl :: copia, che utilizza MPL :: volte internamente.

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

Grazie per la risposta, questo funziona – Kikosha

+0

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