簡體   English   中英

在編譯時推導出二維數組的一維

[英]Deduce one dimension of 2D array at compile time

我有以下功能:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM