是否可以将std::array<class T, std::size_t N>
用作类的私有属性,但在类的构造函数中初始化其大小?
class Router{
std::array<Port,???> ports; //I dont know how much ports do will this have
public:
Switch(int numberOfPortsOnRouter){
ports=std::array<Port,numberOfPortsOnRouter> ports; //now I know it has "numberOfPortsOnRouter" ports, but howto tell the "ports" variable?
}
}
我可能会使用指针,但如果没有它可以这样做吗?
答案 0 :(得分:6)
您必须使您的班级Router
成为模板类
template<std::size_t N>
class Router{
std::array<Port,N> ports;
...
}
如果您希望能够在ports
级指定Router
的大小。顺便说一句,N
必须是编译时已知的常量。
否则您需要std::vector
。
答案 1 :(得分:4)
不,必须在编译时知道大小。请改用std::vector
。
class Router{
std::vector<Port> ports;
public:
Switch(int numberOfPortsOnRouter) : ports(numberOfPortsOnRouter) {
}
};
答案 2 :(得分:3)
std::array<T, N>
的大小是编译时常量,在运行时无法更改。如果您想要一个具有灵活边界的数组,您可以使用std::vector<T>
。如果数组的大小没有改变,并且您以某种方式知道其上下文的大小,则可以考虑使用std::unique_ptr<T[]>
。它的重量更轻,但也无助于复制或调整大小。
答案 3 :(得分:2)
std::array
是一个固定长度的数组。因此,必须在编译时知道长度。如果您需要具有动态长度的数组,则需要使用std::vector
代替:
class Router{
std::vector<Port> ports;
public:
Switch(int numberOfPortsOnRouter):ports(numberOfPortsOnRouter){}
};