std::array
在这种情况下,当包含的类型 (T) 缺少默认构造函数时,初始化 std::array 可能是一个挑战。常见的解决方案是手动重复值来填充数组,对于较大的 n 值来说,这是一个乏味且容易出错的过程。
幸运的是,存在一种更优雅的方法,使用序列类型和自定义重复函数的组合。考虑以下代码:
<code class="cpp">template<typename T, int N> void f(T value) { // Generate a sequence of numbers: 0, 1, ..., N-1 using genseq_t = genseq_t<N>; std::array<T, N> items = repeat(value, genseq_t{}); }</code>
genseq_t
repeat 函数的实现包括解包序列并重复该值对于每个元素,使用简洁的语法:
<code class="cpp">template<typename T, int...N> auto repeat(T value, seq<N...>) -> std::array<T, sizeof...(N)> { // Unpack N, repeating 'value' sizeof...(N) times return {(N, value)...}; }</code>
使用push_back操作递归地定义genseq_t类型以创建序列:
<code class="cpp">template<int N> struct genseq : genseq<N - 1>::type::template push_back<N - 1> {};</code>
自定义序列和重复函数提供了灵活的以及初始化 std::array
以上是如何优雅地初始化非默认可构造类型的 std::array ?的详细内容。更多信息请关注PHP中文网其他相关文章!