在编译时推断2D数组的一个维度

3

我有以下函数:

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);

为什么不使用std::vector等? - Ed Heal
2个回答

5

是的!实际上,你可以在编译时推断两个维度。这个想法是写一个以数组引用为参数的模板函数。这可以防止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;
}

如果您需要的话,您应该能够调整此内容以适应您的需求。

1

你应该像这样通过引用传递数组:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接