潜在的に多次元配列をループするものに取り組んでおり、いくつかのテンプレートの問題に遭遇しています。これが私がやろうとしていることのアイデアです:
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
そのため、少し混乱しているように見えますが、テンプレート パラメータが左または右に移動するディメンションであり、引数がオフセットであるandright
テンプレート メソッドを持つカスタム イテレータを使用しています。たとえば、 がobjIterator
を指している場合は、イテレータを に返しarray[i][j][k]
ます。objIterator.left<0>(1)
array[i-1][j][k]
i
コンパイル時ではなく、のパラメーターとして使用できないため、明らかに私が投稿したものは機能しませんleft
。ここで再帰を使用して、forループを置き換えることでこれを実現できると思いますが、その方法はわかりません。
助言がありますか?