0

いくつかのカスタム データ構造を float** に変換し、それらを float** のみを扱うメソッドの引数として渡します。

私の最初のバージョンでは、メソッドは 2 つの float** しか引数として取りません。

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

2 番目のバージョンでは、float** のリストを、実行ごとに長さが変化するようにしたいと考えています。

解決策として float*** しかありませんが、これはまったく良くありません。

MyMethod は C スタイルです。ベクトルは必要ありません。

他のアイデア?

ありがとう

4

2 に答える 2

2

float** を含む構造体を返します。構造体のインスタンスを渡すこともできます。

これは、呼び出された関数が呼び出し元の 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 つのパラメーターがあったため、構造体には 2 つのメンバーが含まれますが、配列または好きなものを使用できます。

問題をどのように解決しますか: 呼び出し元の float** を変更する必要がなくなったため、float*** はありません。関数は 1 つの値しか返すことができないため、構造体を使用するため、結果を 1 つのオブジェクトにパッケージ化します。

于 2012-12-08T20:06:24.330 に答える
2

問題はfloat***(またはfloat**&) ではありませんが、どのようにしてそれに到達しますか: それは何をfloat**表しているのですか? それらが何かを表している場合は、その何かに「名前」と「スコープ」を付けて住んでいます。つまり、「クラス」を作成し、クラスに * 1 つずつ管理させます。そうしないと、実行できるコードがどれも難解に見えます。

すべてのコードが多数の明示的な間接化によって単一の変数を操作するように縮小されている場合、C++ を使用しても意味がありません。

「2 つ星の言葉」で解決策を見つけることはできますが、コードを再構築してスケーラブルにする必要がないか考えてみてください。

于 2012-12-08T20:22:11.163 に答える