在 C++ 中使用模板传递 2 个不同大小的数组

passing 2 arrays of different sizes using templates in C++

我有以下代码

template <size_t size_x, size_t size_y>
void product(int (&arr)[size_x][size_y],int (&arr1)[size_x][size_y])
{
   for (int i=0;i<size_x;i++)
   for (int j=0;j<size_y;j++)
   {
     cout << "The size of a1[][] is" << arr[i][j] << endl;
   }


   for (int i=0;i<size_x;i++)
   for (int j=0;j<size_y;j++)
   {
     cout << "The size of a1[][] is" << arr1[i][j] << endl;
   }
}

int main()
{

    int A[2][2] = { { 1, 2 }, { 3, 4 }};
    int B[2][2] = { { 0, 5}, { 6, 7 } };

    product(A,B);
    return 0;
}

我正在尝试将数组传递给函数。但是,如果数组的维度相同,则此程序可以正常工作。我想传递不同维度的数组。如何将 22 和 32 数组传递给函数?

How can I pass an array of 22 and 32 array to a function?

只需提供额外的模板参数即可完成此操作

template <size_t size_x1, size_t size_y1, size_t size_x2, size_t size_y2>
void product(int (&arr)[size_x1][size_y1],int (&arr1)[size_x2][size_y2]);

Demo

从 C++20 开始,您可以使用 auto 作为函数参数的类型:

void product(auto &arr, auto &arr1)

您可以获得第一个索引 std::size(arr) 和第二个索引 std::size(*arr) 的数组大小。

完整的程序:

#include <iostream>

using namespace std;

void product(auto &arr, auto &arr1)
{
   for (const auto &inner: arr)
   for (const auto &elem: inner)
   {
     cout << "arr[][] is " << elem << endl;
   }


   for (const auto &inner: arr1)
   for (const auto &elem: inner)
   {
     cout << "arr1[][] is " << elem << endl;
   }

   cout << "size of arr " << size(arr) << " * " << size(*arr) << endl;
   cout << "size of arr " << size(arr1) << " * " << size(*arr1) << endl;
}

int main()
{
    int A[2][2] = { { 1, 2 }, { 3, 4 }};
    int B[3][1] = { { 0}, { 6 }, {3} };

    product(A,B);
    return 0;
}

https://godbolt.org/z/7a315erhf