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

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

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

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

Однако размер src не изменился.

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


person MMM    schedule 31.10.2014    source источник


Ответы (1)


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

Первые поля будут скопированы как обычно, а завершающее новое поле останется нетронутым:

Смотрите Прямой эфир на 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)
person sehe    schedule 31.10.2014
comment
в copy.hpp есть этот код: BOOST_STATIC_ASSERT( result_of::size‹Seq1›::value == result_of::size‹Seq2›::value); Как это у вас компилируется? - person MMM; 01.11.2014
comment
Он был изменен между v1.54 и v.1.55 - person sehe; 01.11.2014
comment
@MMM Я уверен, что вы можете купить более новую версию :) - person sehe; 01.11.2014
comment
есть ли способ использовать представление для копирования минимума из двух последовательностей? - person MMM; 01.11.2014
comment
Да. Чтобы сделать это в общем, это будет немного TMP, но, конечно, вы можете. Я бы подумал о том, чтобы просто написать операцию копирования, как в 1.55 (по той простой причине, что в любом случае это не функциональность времени компиляции) - person sehe; 01.11.2014
comment
хорошо, я только что отредактировал copy.hpp прямо в boost. все равно через месяц обновлю - person MMM; 01.11.2014