继我的问题C++ Tuple of Boost.Range - get Tuple of element types?
之后我有以下内容:
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);
如果我能以某种方式制作包含indices
的融合序列int 0...N
,可能会有效
那么有人可以帮我制作一个提升序列,或找到更好的方法来实现我的目标吗?非常感谢。
答案 0 :(得分:1)
您可以使用boost::mpl::range_c获取一系列递增的非类型模板参数。您需要将此序列复制到另一个mpl :: sequence,因为范围不满足与transform
一起使用的所有必要概念要求。序列可以使用fusion
进行调整。