C++ -- float*** 回避

标签 c++ c arrays list arguments

我要将一些自定义数据结构转换为 float** 并将它们作为仅处理 float** 的方法的参数传递。

在我的第一个版本中,方法只需要 2 个 float** 作为参数,所以我很容易拥有

MyClass::MyMethod(float** data1, float** data2){}

在第二个版本中,我想载入一个 float 列表**,每次执行的长度都不同。

我只有 float*** 作为解决方案,这一点都不好。

MyMethod 是 C 风格的,我不需要任何 vector 等...

其他想法?

谢谢

最佳答案

返回一个包含一些 float 的结构**。您甚至可以传入该结构的一个实例。

这意味着被调用函数不直接操作调用者的 float **,我认为这样更简洁。

作为 C 程序员,我们正在解决这个问题,我理解有时我们被迫不使用真正的 C++ 技术。

如果你有(对于我编写 C 语言以来的任何语法错误,我深表歉意)

 struct floatCarrier { float **ppFloat1, float **ppFloat2 } 
 typdef FloatCarrier struct floatCarrier

你的界面现在可以是

 FloatCarrier myMethod (FloatCarrier in)  /* passed by value, as an example */

myMethod 的实现可以使用来自输入 FloatCarrier 的 float**。如果它需要修改数组,那么它会创建一个带有新 float** 实例的新 FloatCarrier,并在完成后返回新的 FloatCarrier。这确实让调用者有责任从返回的结构中获取新的 float**,但我喜欢这样,感觉更干净。

至于你是否应该有一个已知数量的成员或一个数组……你的例子正好有 2 个参数,所以该结构将有两个成员,但你可以有一个数组或任何你喜欢的东西。

它如何解决您的问题:您不再需要更改调用者的 float **因此没有 float ***。我们使用结构体,因为函数只能返回一个值,所以我们将结果打包到一个对象中。

关于C++ -- float*** 回避,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13781340/

相关文章:

javascript - 如何通过按钮单击事件更改javascript中的数组所有值?

c - _tzset 和 x 字母时区名称

可以使用c代码更改系统的Endianess吗

c++ - 使用MSVC在Windows上编译报错Botan库

c++ - 如何检查boost消息队列是否存在

c - 如何回收和重用分配的内存?

c++ - 为什么 int[] 被视为右值?

javascript - 如何在逗号分隔的字符串中过滤数组对象的唯一值

c++ - 如何同时应用RTP和UDP协议(protocol)来实现音频流?

c++ - SFINAE 和 noexcept 说明符