我将一些自定义数据结构转换为float **并将它们作为仅处理float **的方法的参数传递。
在我的第一个版本中,方法只需要2个float **作为参数,因此我很容易拥有
MyClass::MyMethod(float** data1, float** data2){}
在第二个版本中,我想提供一个浮动列表**,其长度从一次执行到下一次执行不等。
我只有浮动***作为解决方案,这根本不好。
MyMethod是C-Stylish,我不想要任何矢量等......
其他想法?
由于
答案 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 ++是没有意义的。
尽管可以找到“双星词”中的解决方案,但请尝试思考重构代码是否不适合使其更具可扩展性。