我要将一些自定义数据结构转换为 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/