gpt4 book ai didi

c++ - 通过代码构造std::array并初始化元素对象

转载 作者:行者123 更新时间:2023-11-28 01:26:24 25 4
gpt4 key购买 nike

我想初始化我的数组项,同时避免不必要的实例和拷贝(类似于这个问题:initialize std::array without copying/moving elements)。

初始化列表确实适用于少量对象。

由于我的数组有数百个项目,所以我想通过代码片段来做到这一点......

我该怎么做?

#include <array>
#include <iostream>

class mytype {
public:
int a;
mytype() : a(0) {}
mytype(int a) : a(a) {}
};

int main() {
// explict constructor calls to instantiate objects does work
std::array<mytype, 2> a = { { mytype(10), mytype(20) } };
std::cout << a[0].a; // 10

// I want to do something like this - what does not work of course
std::array<mytype, 2> b = { { for (i = 0, i++, i < 2) mtype(10 * i); } };
}

最佳答案

:

#include <array>
#include <utility>
#include <cstddef>

template <typename T, std::size_t... Is>
std::array<T, sizeof...(Is)> to_array(std::index_sequence<Is...>)
{
return { T(Is*10)... };
}

template <typename T, std::size_t N>
std::array<T, N> to_array()
{
return to_array<T>(std::make_index_sequence<N>{});
}

int main()
{
std::array<mytype, 10> b(to_array<mytype, 10>());
}

DEMO

关于c++ - 通过代码构造std::array并初始化元素对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53580436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com