这里的基本问题,(希望)一个简单的答案:我正在尝试编写一个函数,其第一个参数是一个std :: array,但是具有任意大小。
void f(array<int> x) {
//do stuff
}
无效,因为我需要array<int, #>
的尺寸。有办法解决这个问题吗?
答案 0 :(得分:12)
唯一的方法是使f
成为一个功能模板:
template <size_t N>
void f(array<int, N> x) {
//do stuff
}
答案 1 :(得分:12)
Quentins answer 是正确的。
但是,如果您需要在运行时保持灵活性,我建议您改为使用std::vector
。
void f(vector<int> x) {
//do stuff
}
此外,您可能希望使用引用或const
引用来避免复制数组或向量,至少在您不需要副本时。
答案 2 :(得分:5)
第二种方法是使用函数模板(@Quentin)并委托非模板函数:
#include <array>
void g(int* first, int* last) {
//do stuff
}
template <size_t N>
inline void f(std::array<int, N> x) {
g(x.begin(), x.end());
}