通过引用传递数组,但未在函数声明中明确说明数组的大小

时间:2019-04-20 20:07:00

标签: c++

我想知道是否可以通过引用将数组或std :: array传递给函数,而无需在函数声明中明确说明数组的大小,这就是这种方式void Foo(std :: array& )。

const int n = 4;
std::array<int, n> arr;
Foo(arr, n);
void Foo( std::array<int, n>& arr);

2 个答案:

答案 0 :(得分:4)

您不能这样做,因为大小不同的std::array是不同的类型。

根据aparpara的回答将其设为功能模板,或者将其作为范围接受一对迭代器,使其成为功能模板。后一个选项将使其独立于容器类型和元素类型。这也与标准库的执行方式一致:

template <typename Iterator>
void Foo(Iterator first, Iterator last)
{ /* ... */ }

答案 1 :(得分:1)

唯一的方法是制作功能模板:

template <typename T, int N>
void Foo(std::array<T, N>& arr)
{
  ...
}