【发布时间】:2020-05-11 18:07:32
【问题描述】:
我想要一个大容器(特别是std::array),我在编译时知道它的大小,但我可以从构造函数中指定它。
我已经能够完成第一部分:即在编译时指定大小的 std::array。示意图:
// hpp
constexpr int my_size = 100;
class C
{
std::array<int, my_size> data;
}
// main
c = C()
现在我想做同样的事情,但将std::array 传递到类构造函数中,可能是constexpr:
// hpp
class C
{
std::array<int, mysize> data;
C(constexpr int mysize);
}
// cpp
C::C(constexpr int mysize)
{
data = std::array<int, mysize>
}
// main
constexpr int mysize = 100;
c = C(mysize);
显然这是错误的,因为mysize 是在构造函数中传递的,但mysize 也是在声明时必须知道的类型的一部分。
那么我该怎么做呢?
【问题讨论】:
-
通过模板参数传递数组大小?请注意,通常编译器需要知道为
C的实例分配多少存储空间。所以sizeof(C)必须相同,不能依赖构造函数参数。
标签: c++ compile-time