C++--浮点***避免

C++ -- float*** avoidance

本文关键字:避免 浮点 C++--      更新时间:2023-10-16

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

在我的第一个版本中,方法只使用2个float**作为参数,这样我就可以很容易地获得

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

在第二个版本中,我想提供一个浮动**的列表,其长度随着执行的不同而变化。

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

MyMethod是C型的,我不想要任何向量等…

其他想法?

感谢

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

这意味着被调用的函数不会直接操作调用方的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,并且在完成后返回新FloadCarrier。这确实让调用者承担了从返回的结构中获取新float**的责任,但不知何故,我喜欢这样,感觉更干净。

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

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

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

如果所有代码都减少为通过大量显式间接操作单个变量,那么使用C++就没有意义了。

尽管可以找到"二星词"中的解决方案,但如果不是这样,请尝试重新构造代码以使其更具可扩展性。