C++中的C99样式可变长度数组函数签名

Seb*_*ian 4 c c++ arrays c99

在C99中,我们可以像这样编写函数签名:

void func(int dim1, int dim2, float A[dim1 * dim2]);
Run Code Online (Sandbox Code Playgroud)

dim1并且dim2是运行时参数.这很好,因为这种功能的任何用户都可以立即了解维度,A因此可以在不阅读注释/文档的情况下推断出更多信息.如果dim1dim2是具有超出此处所示的语义的参数,则尤其如此.

是否有可能在C++中编写一个接口,提供函数所期望的向量/张量的维数和大小的提示?Dimensionality可能被编码为模板参数(特别是我不喜欢的东西,但这是另一个主题)但是大小?有任何想法吗?

更新:

我想,我必须让它更清楚.C++函数看起来像这样:

void func(int dim1, int dim2, std::vector<float> A);
Run Code Online (Sandbox Code Playgroud)

甚至可以省略两个维度中的一个(因为它是A.size()/dim).但是签名并没有告诉用户任何关于函数期望的向量大小的信息.当然我可以assert(A.size() == dim1*dim2);和那样的事情.这不是我要问的问题.我问如何让界面更具信息性.

更新2:

所以我很确定我想要的是这个:

typedef int dim1; 
typedef int dim2; 
void func(Matrix<dim1, dim2> A);
Run Code Online (Sandbox Code Playgroud)

正如答案中提到的那样,信息必须属于类型 - 当然.

Sne*_*tel 5

在C++中,你会这样做void func(Matrix const& A).尺寸将在矩阵本身中编码,因此不需要单独传递它们.这既保证了尺寸的准确性,又简化了调用习语.