[英]C99 style variable-length array function signature in C++
在C99中,我們可以像這樣編寫函數簽名:
void func(int dim1, int dim2, float A[dim1 * dim2]);
dim1
和dim2
是運行時參數。 這很好,因為這種功能的任何用戶都可以立即了解A
的維度,因此可以在不閱讀注釋/文檔的情況下推斷出更多信息。 如果dim1
和dim2
是超出此處所示語義的參數,則尤其如此。
是否有可能在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.