【问题标题】:C++ -- float*** avoidanceC++——浮点***避免
【发布时间】:2012-11-26 17:00:42
【问题描述】:

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

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

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

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

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

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

其他想法?

谢谢

【问题讨论】:

  • 不使用标准库,用C++有什么意义?
  • 如果您想要一个包含float** 的动态数组,您将成为a three star programmer 并使用float***。我建议重新考虑您的 API 或避免使用 C++ 为您提供的工具。
  • @Cornstalks 告诉其他 200 人在该项目中以这种方式工作
  • @antitrust:我很乐意 :) 但实际上,正如我所说,如果你想要一个包含float** 的动态数组,你真的必须使用float***。拥有float** 的动态数组的唯一另一种选择是使用某种容器(如vector)(它只是隐藏了float***-ness),但显然这不是一个选项。
  • 我无法相信 C++ 项目中的 200 人会喜欢 float*** 而不是更高级别的容器...你在 C中工作吗>? (我也有点好笑,200 个人在同一个项目中工作,改变一个功能界面会影响所有这些用户,如果是这样的话,简化界面就更有优势了......你确定你的真正要求是什么?)

标签: c++ c arrays list arguments


【解决方案1】:

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

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

作为 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**列表,它是一个float**...这如何解决问题我提到了?
  • @antitrust:我认为 djna 的意思是拥有一些struct MyStruct { float** data; };(或者可能具有适当接口的东西),而不是拥有一组MyStructs原始float**s 的数组。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2015-04-08
    • 2016-04-24
    • 2016-12-01
    相关资源
    最近更新 更多