std :: array size在类包装器实例化中设置

时间:2018-03-12 01:06:34

标签: c++ c++11 c++14

class A {};

class B{
private:
   size_t arraySize;
   unique_ptr<array<A, arraySize>> upArrayA;

public:
    B(size_t tArraySize) 
      : arraySize(tArraySize), upArrayA(make_unique<array<A,arraySize>>())
    {}
};

B b(3);    //would like to set array size here

上面的代码不起作用,因为arraySize不是静态const。

我知道数组需要编译大小的时间知识,但普通C数组也是如此。然而,使用C数组,您可以使用动态语法来绕过此要求。

是否有一些忍者神奇的方法,我可以在对象实例化时设置数组的大小?

1 个答案:

答案 0 :(得分:1)

根据大小模板化类:

template <std::size_t arraySize> 
class B {
private:
   unique_ptr<std::array<A, arraySize>> upArrayA;

public:
    B() : upArrayA(std::make_unique<>()) {}
};

用法如下:

B<3> b;