【发布时间】:2012-04-27 19:00:45
【问题描述】:
我正在处理可能在多维数组上循环的东西,但遇到了一些模板问题。这是我想要做的事情的想法:
template<std::size_t D = 3>
class Deriv {
public:
typedef typename boost::array<double, D> results_t;
template<typename Iterator>
results_t operator()(Iterator& objIterator)
{
double u;
double um1;
results_t derivs;
for(results_t::index i = 0; i < D; ++i) {
u = *objIterator;
um1 = *(objIterator.left<i>(1));
derivs[i] = u-um1;
}
}
};
};
所以,它看起来有点混乱,但它使用了一个自定义迭代器,该迭代器具有 left 和 right 模板方法,其中模板参数是要向左或向右移动的维度,参数是偏移量。例如,如果objIterator 指向array[i][j][k],则objIterator.left<0>(1) 返回一个指向array[i-1][j][k] 的迭代器。
显然我发布的内容不起作用,因为i 不是编译时间,不能用作left 的参数。我觉得递归可以在这里以某种方式通过替换 for 循环来实现这一点,但我不知道如何。
有什么建议吗?
【问题讨论】: