在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);
正如答案中所提到的,信息必须属于类型 - 当然。
答案 0 :(得分:5)
在C ++中,你需要void func(Matrix const& A)
。尺寸将在矩阵本身中编码,因此不需要单独传递它们。这既保证了尺寸的准确性,又简化了调用习惯用语。
答案 1 :(得分:0)
您可以使用std::array
:
void func(std::array<int, /* dimension */> &arr);