Есть ли у Fusion функция хвоста? - PullRequest
1 голос
/ 21 июня 2019

Мне нужна функция в виде хвоста, которую можно использовать так:

boost::fusion::vector<char, int, float> a('a', 12, 5.5f);
boost::fusion::vector<int, float> b(12, 5.5f);

boost::fusion::copy( Tail(a), b );

1 Ответ

1 голос
/ 21 июня 2019

В документации для Boost Fusion есть раздел под Алгоритмы , называемый Преобразование .Перечисленные здесь функции , в частности, включают функцию с именем pop_front.Похоже, что это именно то, что мы хотим:

Возвращает новую последовательность с удалением первого элемента оригинала.
...

Пример

assert(pop_front(make_vector(1,2,3)) == make_vector(2,3));

Для вашего примера:

boost::fusion::vector<char, int, float> a('a', 12, 5.5f);
boost::fusion::vector<int, float> b(12, 5.5f);

boost::fusion::copy( boost::fusion::pop_front(a), b );

Имя pop_front немного странно, учитывая, что оно фактически не изменяет последовательность ввода, но возвращает измененный результат.Однако pop_front происходит из стандартной библиотеки C ++, где она используется для удаления первого элемента коллекции, например, с std::list::pop_front.Boost Fusion выбрал это имя как «более согласованное» со стандартной библиотекой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...