根据const整数字段设置数组字段的长度

2ma*_*mac 1 c++ arrays static-memory-allocation

假设我上课了...

class Foo
{
public:
  Foo(int size);

private:
  const int size;
  int data[];
};
Run Code Online (Sandbox Code Playgroud)

假设在实例化时立即设置了size字段,如何data根据该大小输入设置长度?

我通常会在std::vector这里使用,但我正在为Arduino编写一个库,所以它不会飞,我试图避免外部依赖,如果可以的话.

vso*_*tco 6

你在这里运气不好,因为C++必须在编译时知道数组的大小(换句话说,size必须是一个常量表达式).您可以选择使用动态分配

int* data;  
Run Code Online (Sandbox Code Playgroud)

然后new int[size];在构造函数初始化列表中分配,或者更好的是,使用std::unique_ptr<>(C++ 11或更高版本),这是一个围绕原始指针的光包装,并在范围退出时删除其分配的内存,因此您不必手动delete[]

class Foo
{
private:
    std::unique_ptr<int[]> data; // no need to manually delete
public:
    Foo(int size): data{new int[size]} {}
};
Run Code Online (Sandbox Code Playgroud)

第三个选项是创建Foo一个非类型模板类(假设您知道编译时的大小,这似乎正在发生,至少从您的问题判断)

template<std::size_t size>
class Foo
{
    int data[size];
public:
    Foo() 
    {
        // constructor here
    }
};
Run Code Online (Sandbox Code Playgroud)