具有模板参数相关大小的固定大小的 C 数组

Pat*_*nan 0 c++ c++11

我正在使用模板化类,我想包含固定大小的数据数组,其大小取决于模板参数。一个简化的例子是

template<int D>
class Foo
{    
    private:
        int m_array[D*(D+1)];            
};
Run Code Online (Sandbox Code Playgroud)

虽然可变大小的 C 数组通常不受欢迎是可以理解的,但在这里它们可能是合理的,因为D它很小并且很清楚有多少值m_array保存(并且它不能改变大小)。我的问题是

  1. 首先,这实际上是对可变大小数组的合理使用吗?
  2. 这是否总是不好的做法,因为编译器并不普遍支持这些数组?
  3. 有没有干净的替代品?可以使用 astd::vector并在构造函数中设置大小,我认为这会使代码不太清楚。是否最好使用 C++11 的std::array,从而将上面示例中的相关行更改为std::array<int,D*(D+1)> m_array;

chr*_*ock 5

您的示例不是可变长度数组,就像 C99 中存在的那样。在那里,数组的大小仅在运行时才知道。

在这里,您使用编译时常量来设置数组的大小。这样做没有问题。出去享受吧。