boost融合将较小的序列复制到较大的序列中

boost fusion copy smaller sequence into larger sequence

本文关键字:复制 融合 boost      更新时间:2023-10-16

到目前为止,我一直在将src融合序列复制到dst融合序列中。

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

然而,dst是一个被改编为融合序列的结构体,它有一个新成员,位于最后。

src的大小没有改变。

我该怎么解决?

您只需要保留相同的代码。

第一个字段将一如既往地被复制,后面的新字段保持不变:

查看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)