在编译时推导出二维数组的一维

Deduce one dimension of 2D array at compile time

本文关键字:二维数组 一维 编译      更新时间:2023-10-16

我有以下函数:

template <int size>
double** writeArray(double input[size][2]) {
    double** Points = new double*[size];
    for (int i = 0; i < size; ++i) {
        Points[i] = new double[2];
    }
    for (int i = 0; i < size; ++i) {
        Points[i][0] = input[i][0];
        Points[i][1] = input[i][1];
    }
    return Points;
}

它从 double[size][2] 数组写入动态分配的double **指针。

有没有办法自动推断size,这样我就可以这样使用它:

double** Points = writeArray(Test1);

而不是:

double** Points = writeArray<2>(Test1);

是的!实际上,您可以在编译时推导出这两个维度。这个想法是编写一个模板函数,该函数通过引用将数组作为其参数。这可以防止C++将数组类型衰减为指针类型,从而导致其丢失数组大小。下面是一个示例:

template <typename T, size_t M, size_t N>
    void howBigAmI(T (&array)[M][N]) {
    std::cout << "You are " << M << " x " << N << " in size." << std::endl;
}

如果您愿意,您应该能够对其进行调整以满足您的需求。

你应该通过引用传递数组,如下所示:

template <int size>
double** writeArray(const double (&input)[size][2])