2013-10-24 18 views
8

Onları oluşturmak üzere farklı vektörlerinartırmak :: mpl :: vektörleri

mpl::vector<Type1, Type2...> 
mpl::vector<Type3, Type4...> 
ben "bitiştirmek" istiyorum

zorunda "bitiştirmek" Nasıl:

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

Bu bana izin vektör şablonları hazırlamak ve daha sonra bunları yeniden kullanmak. Sorunumda farklı çözümler var, ancak bu yaklaşım benim için en uygun gibi görünüyor.

sayesinde ... Bu gibi

cevap

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

emin değilim, ama o first_type ve second_type anahtarlamalı düşünüyorum. Eğer bu konuda yanlış olmazsam, 'türlerine sahip olursunuz. – llonesmiz

+0

@cv_and_he [Sağ] (http://www.boost.org/doc/libs/1_54_0/libs/mpl/doc/refmanual/back-inserter.html), türlerin siparişine önem vermedim . –

+0

Teşekkürler, bu kod işi yapıyor. Benim durumumda bu yöntem derleme zamanında çok miktarda bellek tüketiyor olsa da ... – Kikosha

2

Sen mpl kullanabilirsiniz :: mpl içten kat :: kullanan kopyalama,.

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

Cevabınız için teşekkürler, bu çalışır – Kikosha

+0

Çevrimiçi demo: http://coliru.stacked-crooked.com/a/50d3d9b6707cd457 –

İlgili konular