Взаимодействие между средой выполнения и последовательностями слияния - PullRequest
2 голосов
/ 11 августа 2011

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

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

TupleOfRanges ranges; 
TupleOfElements elements;

std::vector<int> offsets;

Все контейнеры (обаmeta и runtime) имеют размер 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 transform, но проблема может заключаться в том, что функтор не знает индекс элемента, который он

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

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

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

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

1 Ответ

1 голос
/ 11 августа 2011

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

...