0

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

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

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

在第二个版本中,我想提供一个 float** 列表,其长度从一次执行到下一次执行不等。

我只有 float*** 作为解决方案,这根本不好。

MyMethod 是 C 风格的,我不想要任何矢量等...

其他想法?

谢谢

4

2 回答 2

2

返回一个包含一些浮点数的结构**。你甚至可以传入结构的一个实例。

这意味着被调用的函数不会直接操纵调用者的 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 个参数,因此该结构将有两个成员,但您可以拥有一个数组或任何您喜欢的东西。

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

于 2012-12-08T20:06:24.330 回答
2

问题不在于float***(或float**&),而在于你是如何得出这个结论的:这float**代表什么?如果他们代表某物,请给该东西一个“名称”和一个“范围”以供居住。换句话说,创建一个“类”并让该类来管理 * 一个。否则你能做的任何代码都会显得晦涩难懂。

如果所有代码都简化为通过大量显式间接操作单个变量,那么使用 C++ 毫无意义。

虽然可以找到“双星词”中的解决方案,但如果不是这种情况,请尝试重新构造代码以使其更具可扩展性。

于 2012-12-08T20:22:11.163 回答