1

関数内の3D配列にメモリを割り当てたいのですが。

void*** myFunc(int myType){

  double ***p2DArray;

  // Allocate memory
  p2DArray = new double**[HEIGHT];
  for (int i = 0; i < HEIGHT; ++i) {
    p2DArray[i] = new double*[WIDTH];

    for (int j = 0; j < WIDTH; ++j) {
      p2DArray[i][j] = new double[DEPTH];
      for (int k = 0; k < LENGTH; ++k)
          p2DArray[i][j][k] = 0;
    }
  }
  return p2DArray;
}

上記のコードでは、double型が作成されています。myType私の質問は、パラメータに応じて異なるデータ型を作成する方法ですか?ちなみに、上記のコードを2回コピーしたくありません。

4

1 に答える 1

1

C ++の関数に型を渡したい場合は、テンプレートを使用する必要があります。

template <typename T>
T*** func() {
    T*** array;
    array = new T**[HEIGHT];
    ...
    return array
}

次に、この関数を次のように呼び出すことができます。

double*** var = func<double>();

コンパイラがその呼び出しを検出func<double>()すると、テンプレートを検索し、すべての'func()を単に置き換える通常の(非テンプレート)関数を生成します。Tdouble

この設計では、ベクトルなどの慣用的なC++コンテナーの使用を検討する必要があります。これにより、イテレータなど、コードをより安全で読みやすくするための多くの機能が提供されます。

ベクトルの1つのオプションは、配列を。に置き換えることvector<vector<vector<T>>>です。もう1つのオプションはvector<T>、サイズが。のシングルを使用することですWIDTH * HEIGHT * DEPTH

于 2013-01-07T22:27:02.973 に答える