将二维数组作为函数参数传递

Passing a 2D array as Function Argument

我正在尝试将任意大小的二维数组传递给一个函数。我试过的代码如下:


#include <iostream>
void func(int (&arr)[5][6])
{
    std::cout<<"func called"<<std::endl;
}
int main()
{
    int arr[5][6];
    func(arr);
    return 0;
}

如您所见,func 被正确调用。但我想传递一个任意大小的二维数组。在当前示例中,我们只能传递 int [5][6].

PS:我知道我也可以使用 vector 但我想知道是否有办法用数组来做到这一点。例如,我应该可以写:

int arr2[10][15];
func(arr2);//this should work 

您可以使用 模板 来完成此操作。特别是,使用 nontype template parameters 如下所示:


#include <iostream>
//make func a function template
template<std::size_t N, std::size_t M>
void func(int (&arr)[N][M])
{
    std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
    int arr2[10][15];
    func(arr2);
    return 0;
}

在上面的例子中,NM 被称为非类型模板参数。

使用模板我们甚至可以让数组中元素的类型任意化,如下所示:

//make func a function template
template<typename T, std::size_t N, std::size_t M>
void func(T (&arr)[N][M])
{
    std::cout<<"func called with: "<<N<<" rows and "<<M<<" columns"<<std::endl;
}
int main()
{
    int arr2[10][15];
    func(arr2);
    
    float arr3[3][4];
    func(arr3);//this works too
    return 0;
}