C++ 将未知大小的多维数组传递给函数

C++ 将未知大小的多维数组传递给函数,c++,visual-studio,opencl,C++,Visual Studio,Opencl,我需要编写一个程序来计算矩阵中的值,首先按顺序计算,然后使用openCL并行计算 这与我在常规C中所做的相同(使用MPI) 我想做一些简单的函数来初始化矩阵和打印矩阵等等 在C语言中,我通常非常简单: // Matrix initialization void initMatrix(size_t M, size_t N, double (*matrix)[M][N][2]) { int i, j; for (j = 0; j < N; ++j) {

我需要编写一个程序来计算矩阵中的值,首先按顺序计算,然后使用openCL并行计算

这与我在常规C中所做的相同(使用MPI)

我想做一些简单的函数来初始化矩阵和打印矩阵等等

在C语言中,我通常非常简单:

// Matrix initialization
 void initMatrix(size_t M, size_t N, double (*matrix)[M][N][2])
{
    int i, j;
    for (j = 0; j < N; ++j)
    {
        for (i = 0; i < M; ++i)
        {
            (*matrix)[i][j][0] = (double)(( i * ( M - i - 1 ) ) * ( j * ( N - j - 1 ) ));
            (*matrix)[i][j][1] = (*matrix)[i][j][0];
        }
    }
    printf("Matrix has been initialized\n");
}
//矩阵初始化
void initMatrix(大小为M,大小为N,双(*矩阵)[M][N][2])
{
int i,j;
对于(j=0;j

我看到这在C++中给了我错误,因为编译器想知道编译时数组的大小(M和N大小作为参数传递给程序,因此我在编译时不知道)。 如何在C++中实现这一点?< /P>


我正在考虑使用向量,但我不确定这是否是个好主意,因为我必须使用OpenCL库

您可以通过模板通过引用/常量引用传递数组:

#include <iostream>
#include <cstddef> // for std::size_t

template <typename T, int M, int N, int P>
void f(T (&arr)[M][N][P]) // accepts 3-D arrays of arbitrary types
{
    std::cout << "Size: " << M << " x " << N << " x " << P;
}

int main()
{
    const std::size_t M = 2; 
    const std::size_t N = 3;
    double arr[M][N][4];
    f(arr);
}
#包括
#包括//标准::尺寸\u t
模板
void f(T(&arr)[M][N][P])//接受任意类型的三维数组
{

std::cout对我来说,它看起来像
双垫[M][N][2]
其中M和N是常量大小\u t,但它给了我errors@dominicbri7
M
N
必须是编译时常量(不是通过
const
传递的函数参数)。应该可以,请参阅更新的编辑。这就是问题所在,正如我在问题中提到的,M和N大小必须作为参数传递给程序,我必须处理给定的任何尺寸(从3到10000)每人dimension@dominicbri7对不起,错过了那个部分…为什么不通过一维的数组,<代码> ***ARR 二维数组等等,以及维度,这就是让我考虑使用向量的原因,因为它们在内部处理它们的大小,如果需要的话,我甚至可以调整它们的大小。对于一个最小变化的解决方案,但我认为不会发生这种情况。