10

如何为类型为std::array<T, ?>(未定义大小)的模板类 AClass 声明和设置成员变量?实际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

4 回答 4

14

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

于 2012-12-18T14:50:40.773 回答
9

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

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

你必须使用std::vector这个。

于 2012-12-18T14:50:59.417 回答
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;
于 2012-12-18T14:53:20.027 回答
2

You can't have std::array with undefined size.
Use std::unique_ptr<T[]> or std::vector instead.

于 2012-12-18T14:55:43.613 回答