gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:56 24 4
gpt4 key购买 nike

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

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

dim1dim2 是运行时参数。这很好,因为任何使用此类函数的用户都会立即了解 A 的维数,因此无需阅读注释/文档即可推断出更多信息。如果 dim1dim2 是语义超出此处所示内容的参数,则尤其如此。

是否可以用 C++ 编写一个接口(interface)来提示函数所期望的 vector/张量的维数和大小?维度可能可以编码为模板参数(我特别不喜欢的东西,但这是另一个主题)但是大小?有什么想法吗?

更新:

我想我必须说得更清楚些。 C++ 函数看起来像这样:

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

甚至可以省略两个维度之一(因为它是 A.size()/dim)。但是签名不会告诉用户有关函数期望的 vector 大小的任何信息。当然,我可以 assert(A.size() == dim1*dim2); 之类的东西。那不是我要问的。我在问如何让界面信息更丰富。

更新 2:

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

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

正如答案中提到的,信息必须在类型中 - 当然。

最佳答案

在 C++ 中,您会执行 void func(Matrix const& A)。维度将在矩阵本身中进行编码,因此无需单独传递它们。这样既保证了维度的准确性,又简化了调用的成语。

关于c++ - C++ 中的 C99 样式可变长度数组函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24410754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com