2014-10-31 3 views
2

До сих пор я копировал последовательность слияния src в последовательность слияния dst.ускорение слияния копировать меньшую последовательность в большую последовательность

struct Dst { ... } dst; 
boost::fusion::copy(src, dst); 

Однако dst, являющийся структурой, адаптированной как последовательность слияния, имеет новый элемент, помещенный последним.

Размер src не изменился.

Как это исправить?

ответ

0

Вы просто сохраняете тот же код.

Первые полей будут скопированы, как всегда, и тянущаяся, новое, поле остается нетронутым:

Посмотри Live On Coliru

#include <boost/fusion/include/vector.hpp> 
#include <boost/fusion/include/struct.hpp> 
#include <boost/fusion/algorithm/auxiliary/copy.hpp> 
#include <boost/fusion/include/io.hpp> 
#include <iostream> 

namespace fus = boost::fusion; 

struct X { 
    int i; 
    double d; 
    std::string s; 
    std::string extra; 
}; 

BOOST_FUSION_ADAPT_STRUCT(X, (int,i)(double,d)(std::string,s)(std::string,extra)) 

int main() 
{ 
    fus::vector<int, double, std::string> src(42, 3.14, "hello"); 

    X dst { -1, -1, "filler", "filler" }; 

    fus::copy(src, dst); 

    std::cout << fus::as_vector(dst); 
} 

Печать

(42 3.14 hello filler) 
+0

там это код в copy.hpp: BOOST_STATIC_ASSERT (result_of :: size :: значение == result_of :: size :: значение); Как он компилируется для вас? – MMM

+0

Он был изменен между [v1.54] (http://www.boost.org/doc/libs/1_54_0/boost/fusion/algorithm/auxiliary/copy.hpp) и [v.1.55] (http: // www.boost.org/doc/libs/1_55_0/boost/fusion/algorithm/auxiliary/copy.hpp) – sehe

+0

У меня есть boost 1.54 – MMM

 Смежные вопросы

  • Нет связанных вопросов^_^