我正在處理可能會在多維數組上循環的內容,並且遇到了一些模板問題。這裏是我想要做的想法:用於循環替換的模板
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