[英]Initialize an std::array of a class without a copy/move constructor?
[英]How can I initialize an std::array of a class without a default constructor?
假设我有一个没有名为
Foo<\/code>的默认构造函数的类。
如果我使用的是
std::vector<\/code> ,我可以这样做:
std::vector<Foo> vec(100, Foo(5));
std::array<\/code>只是一个固定数组的薄包装。
它没有重复插入逻辑,就像
std::vector<\/code>那样。
由于
Foo<\/code>没有默认构造函数,初始化
std::array<Foo, N><\/code>实例的唯一方法是使用指定
N<\/code>个值的
聚合初始化<\/a>(对不起,我知道你不想这样做这),例如:
std::array<Foo, 100> arr{5, 5, 5, ...}; // N times...
使用复制构造函数,类似于以下内容:
template <typename T, size_t... Is>
std::array<T, sizeof...(Is)> MakeArrayHelper(
const T& val, std::index_sequence<Is...>) {
return {(Is, val), ...};
}
template <typename T, size_t N>
std::array<T, N> MakeArray(const T& val) {
return MakeArrayHelper<T>(val, std::make_index_sequence<N>{});
}
std::array<Foo, 100> arr = MakeArray<Foo, 100>(Foo(5));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.