2

关于我的问题C++ Tuple of Boost.Range - 获取元素类型的元组?

我有以下内容:

TupleOfRanges ranges; 
TupleOfElements elements;

std::vector<int> offsets;

所有容器(元容器和运行时)都是 size 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

那么有人可以帮我做一个升序,或者找到更好的方法来实现我的目标吗?非常感谢。

4

1 回答 1

1

您可以使用boost::mpl::range_c获得一系列升序的非类型模板参数。您需要将此序列复制到另一个 mpl::sequence,因为范围不满足与 一起使用的所有必要概念要求transform。序列可以用 来调整fusion

于 2011-08-11T13:46:54.983 回答