用静态2d数组定义类的方便方法是什么(并且2d数组的大小只有在编译时才知道)

What is a convenient way to define a class with a static 2d array (and the size of the 2d array is known only during compile time)?

本文关键字:数组 2d 编译 并且 定义 静态 方便 方法 是什么      更新时间:2023-10-16

下面的示例代码显示了我要做的事情:

template<int NX, int NY>
class Array
{
public:
  float v[NX][NY];
};
void main()
{
  Array<10,20> grid;
}

上面的代码不会编译,但它显示了我想要做的事情。我们有一个包含数组的类,而数组类直到编译时才知道它的大小。有简单的方法吗?

编辑:我想写一个简单的可重用数组类。这意味着我需要找到一种将数组大小与类分离的好方法。

我还希望这个类是快速的(简单的),所以它不能被动态分配。这意味着在运行时无法给出大小。

我也不想使用预处理器来定义大小,因为这意味着我将不得不经历在某个地方更改数字的麻烦。这还不够方便。

基本上,类直到编译时才知道自己的大小,因为这时主函数告诉类的大小。

编辑:上面的代码很好。

除了main没有返回int之外,这是合法的代码,应该编译。事实上,在某些编译器上,这将在main不返回int的情况下进行编译,例如VC++,但这是非标准行为。

您还可以在编译时存储大小,这样就不必手动计算。

#include <iostream>
template<int NX, int NY>
class Array
{
public:
  float v[NX][NY];
  int size() const { return ArraySize; }
private:
  enum { ArraySize = NX * NY }; // You can also store rows/cols individually
};
int main()
{
  Array<10,20> grid;
  std::cout << grid.size();
  return 0;
}

Boost.MultiArray可能适合您的需求。