簡體   English   中英

C ++中的C99樣式可變長度數組函數簽名

[英]C99 style variable-length array function signature in C++

在C99中,我們可以像這樣編寫函數簽名:

void func(int dim1, int dim2, float A[dim1 * dim2]);

dim1dim2是運行時參數。 這很好,因為這種功能的任何用戶都可以立即了解A的維度,因此可以在不閱讀注釋/文檔的情況下推斷出更多信息。 如果dim1dim2是超出此處所示語義的參數,則尤其如此。

是否有可能在C ++中編寫一個接口,提供函數所期望的向量/張量的維數和大小的提示? Dimensionality可能被編碼為模板參數(特別是我不喜歡的東西,但那是另一個主題)但是大小? 有任何想法嗎?

更新:

我想,我必須讓它更清楚。 C ++函數看起來像這樣:

void func(int dim1, int dim2, std::vector<float> A);

甚至可以省略兩個維度中的一個(因為它是A.size()/dim )。 但是簽名並沒有告訴用戶任何關於函數期望的向量大小的信息。 當然我可以assert(A.size() == dim1*dim2); 和那樣的事情。 這不是我要問的問題。 我問如何讓界面更具信息性。

更新2:

所以我很確定我想要的是這個:

typedef int dim1; 
typedef int dim2; 
void func(Matrix<dim1, dim2> A);

正如答案中提到的那樣,信息必須屬於類型 - 當然。

在C ++中,你將使用void func(Matrix const& A) 尺寸將在矩陣本身中編碼,因此不需要單獨傳遞它們。 這既保證了尺寸的准確性,又簡化了調用習語。

你可以使用std::array

void func(std::array<int, /* dimension */> &arr);

暫無
暫無

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

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