2014-10-31 55 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 :: value == result_of :: size :: value);它是如何为你编译的? – MMM 2014-10-31 23:26:07

+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 2014-10-31 23:34:24

+0

我有提升1.54 – MMM 2014-10-31 23:37:10