定义一个以std :: array作为参数的函数

时间:2014-07-10 17:29:09

标签: c++ arrays

这里的基本问题,(希望)一个简单的答案:我正在尝试编写一个函数,其第一个参数是一个std :: array,但是具有任意大小。

void f(array<int> x) {
    //do stuff
}

无效,因为我需要array<int, #>的尺寸。有办法解决这个问题吗?

3 个答案:

答案 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());
}