我想编写一个函数,将n int
作为每个坐标的最大值的数组坐标。该函数将这些参数线性化以针对特定索引。std ::模板专门化中的数组
int my_func(int x, int y, int XMAX, int YMAX){
return x + y*XMAX;
}
这里是一个2D的例子,但我可以很容易使一些通用得益于可变参数模板。 但是,当我想使参数中的每个坐标都不具有最大值的同一个函数时,我就陷入了困境。 类似的东西:
template<int XMAX, int YMAX>
int my_func(int x, int y){
return x + y*XMAX;
}
这工作在2D,但我想笼统地说,从1到N的尺寸,我不知道我怎么能做到这一点。 我想通过一个int N
这是维数和std::array<N, int>::iterator
这是一个迭代器std::array
包含实际的最大值,但它不会编译。 下面是代码:
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)。
使用[non-type template parameters]的[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的[标准:: integer_sequence](http://en.cppreference.com/w/cpp/utility/integer_sequence)(在C++ 11容易写)。 –