Взаимодействие между средой выполнения и последовательностями слияния
В дополнение к моему вопросу 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
,