C ++ - 浮动***避免

时间:2012-12-08 20:00:45

标签: c++ c arrays list arguments

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

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

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

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

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

MyMethod是C-Stylish,我不想要任何矢量等......

其他想法?

由于

2 个答案:

答案 0 :(得分:2)

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

这意味着被调用的函数不会直接操纵调用者的浮动**,我认为它更清晰。

我们作为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 **,但不知何故我喜欢它,感觉更干净。

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

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

答案 1 :(得分:2)

问题不是float***(或float**&),但您是如何理解的:float**代表什么? 如果他们代表什么,给它一个“名称”和“范围”来生活。换句话说,创建一个“类”,让班级来管理*一个。否则,无论你能做什么代码都会看起来很神秘。

如果所有代码都通过一些显式间接来减少操作单个变量,那么使用C ++是没有意义的。

尽管可以找到“双星词”中的解决方案,但请尝试思考重构代码是否不适合使其更具可扩展性。