c++中C99风格的变长数组函数签名
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++中编写一个接口,提示函数期望的向量/张量的维数和大小?维度可能可以编码为模板参数(我不喜欢的东西,但这是另一个主题),但大小?什么好主意吗?
更新:
我想我必须让它更清楚。c++函数应该是这样的:
void func(int dim1, int dim2, std::vector<float> A);
和两个维度中的一个甚至可以省略(因为它是A.size()/dim
)。但是签名并没有告诉用户函数所期望的向量的大小。当然我可以assert(A.size() == dim1*dim2);
和类似的东西。我问的不是这个。我想问的是如何让这个界面更有信息量。
所以我很确定我想要的是这个:
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);
相关文章:
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 打印 2D 动态数组 c++ 函数
- C++数组函数
- 在数组函数指针中调用void
- 数组函数似乎没有找到最大值
- 使用数组函数和循环求解伪元编码|C
- 在头文件中的函数原型中获取指针数组:函数声明为 void
- 数组函数错误输出
- 读取文件,然后创建数组函数C++
- 指针数组函数参数-奇怪的行为
- 二维数组 - 函数
- "return"没有从数组函数返回正确的值
- 数组函数问题
- 数组函数的大小返回 int 的大小而不是数组
- 从数组函数中删除元素
- 如何从C++中最好地调用具有C99风格数组函数签名的函数
- 追加/打印/插入数组c++函数问题
- 如何将数组函数转换为指针函数
- 多维数组函数输出垃圾
- C++:数组函数的递归最大值