我正在处理可能会在多维数组上循环的内容,并且遇到了一些模板问题。这里是我想要做的想法:用于循环替换的模板
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循环来实现这一点,但我不知道如何。
有什么建议吗?
@ildjarn它看起来像它,但它不是。这是:'模板无效申请(' –
Anycorn
2012-04-27 19:51:36
是的,我意识到,提交后的评论和删除它不久后: - ] – ildjarn 2012-04-27 19:52:56
@ildjarn浩伤害 – Anycorn 2012-04-27 19:55:51