繁体   English   中英

"如何在没有默认构造函数的情况下初始化类的 std::array?"

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM