各座標の最大値を持つ配列の座標としてn int
をとる関数を作成したいと思います。この関数は、これらのパラメータを線形化して特定のインデックスをターゲットにします。std :: array in template specialization
int my_func(int x, int y, int XMAX, int YMAX){
return x + y*XMAX;
}
ここでは2次元の例ですが、私はvariadicテンプレートのおかげでかなり簡単に何かを作ることができます。 しかし、私はパラメータの各座標の最大値を取らない同じ関数を作りたいと思っています。そのような 何か:
template<int XMAX, int YMAX>
int my_func(int x, int y){
return x + y*XMAX;
}
ここでは、2Dで動作しますが、私は1からNの寸法にそれを一般化したいと私はそれを達成できたのか分かりません。 は次元の数であり、実際の最大値を含むstd::array
のイテレータであるstd::array<N, int>::iterator
を渡しますが、コンパイルされません。ここで コードです:
template <int N, std::array<size_t, N>::iterator it>
void foo(){...}
それは’std::array<long unsigned int, N>::iterator’ is not a type
を言います。 私がstd::array
を渡すと、次のエラーが発生します。’struct std::array<long unsigned int, N>’ is not a valid type for a template non-type parameter
誰かがこのような問題を解決する方法について考えていますか?私はC++ 11(G ++ 5.4.0)を使用しています。
[非型テンプレートパラメータ]の[pack](http://en.cppreference.com/w/cpp/language/parameter_pack)(http://stackoverflow.com/documentation/c%2b%2b/460/templates/16713/non-type-template-parameter#t = 201704191346386294095) –
@WF私はそれが私にここでどのように役立つのか分かりません。 – Viridya
C++ 14の[std :: integer_sequence](http://en.cppreference.com/w/cpp/utility/integer_sequence)(簡単にC++ 11で書き込み可能) –