Взаимодействие между средой выполнения и последовательностями слияния

В дополнение к моему вопросу C++ Tuple of Boost.Range - получить Tuple типов элементов?

У меня есть следующее:

TupleOfRanges ranges; 
TupleOfElements elements;

std::vector<int> offsets;

Все контейнеры (как мета, так и во время выполнения) имеют размер N, Я хотел бы написать код, который делает следующее:

boost::fusion::at_c<0>(elements) 
    = *(boost::begin(boost::fusion::at_c<0>(ranges)) + offset[0]);
boost::fusion::at_c<1>(elements) 
    = *(boost::begin(boost::fusion::at_c<1>(ranges)) + offset[1]);
// ...
boost::fusion::at_c<N>(elements) 
    = *(boost::begin(boost::fusion::at_c<N>(ranges)) + offset[N]);

Я пытался написать это с помощью Fusion's transform может показаться, что функтору не известен индекс элемента, с которым он работает.

Я думал, что-то вроде

elements 
    = boost::fusion::transform(boost::fusion::zip(ranges, indices), getValue);

может работать, если бы я мог как-то сделать последовательность Fusion indices содержащий int 0...N

Так может ли кто-нибудь помочь мне сделать восходящую последовательность или найти лучший способ достичь своей цели? Большое спасибо.

1 ответ

Решение

Вы можете получить последовательность восходящих нетиповых параметров шаблона с помощью boost:: mpl:: range_c. Вам нужно будет скопировать эту последовательность в другой mpl:: sequence, так как диапазоны не удовлетворяют всем необходимым требованиям концепции для использования с transform, Последовательность может быть адаптирована с fusion,

Другие вопросы по тегам