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参数创建不同的数据类型?顺便说一句,我不想​​把上面的代码复制两次。

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()并生成一个常规(非模板)函数,该函数只需将所有T's替换为double.

对于此设计,您应该考虑使用惯用的 C++ 容器,例如向量。这提供了许多使您的代码更安全、更易读的功能,例如迭代器。

向量的一种选择是简单地将数组替换为vector<vector<vector<T>>>. 另一种选择是使用vector<T>大小为WIDTH * HEIGHT * DEPTH.

于 2013-01-07T22:27:02.973 回答