类型为std :: array <t,?=“”> </t,>的成员变量

时间:2012-12-18 14:48:36

标签: c++ arrays oop

如何为模板类AClass声明和设置成员变量,类型为std::array<T, ?>(未定义大小)?实际的std::array将在构造函数中创建,其中数组的大小是构造函数参数。

在伪C ++代码中:

template <typename T> class AClass {

protected:
    std::array<T, ?>* array;

public:

    AClass(int n) {
        this->array = new std::array<T, n>;
    }

}

如何更正代码?

4 个答案:

答案 0 :(得分:14)

请勿使用std::array,请使用std::vectorstd::array的大小必须是编译时常量。如果要在构造函数中传递它,则需要使用std::vector

答案 1 :(得分:9)

  

要在构造函数中创建实际std::array,其中数组的大小是构造函数参数。

std::array的大小必须在编译时知道,在你的情况下不是。

您必须使用std::vector

答案 2 :(得分:4)

与在运行时真正定义大小的std::vector分开,您也可以选择在编译时指定大小(例如根据您的问题指定最大可能值)并'传播'模板参数给你班级的客户,即

template <typename T, std::size_t n> 
class AClass {
   protected:
       std::array<T, n> array;
   public:
       AClass() {
           // nothing to do
       }
}

然后你就这样使用它:

AClass<int, 5> myAClass;

答案 3 :(得分:2)

您不能拥有未定义尺寸的std::array 请改用std::unique_ptr<T[]>std::vector