想象我有以下课程:
class Foo
{
public:
Foo(int a) : a_(a) { }
private:
int a_;
};
我还有以下数组:
std::array<int, 5> as = { 1, 8, 3, 0, 12 };
现在我想创建一个 Foo 的常量数组,其中 as 作为参数,如下所示:
const std::array<Foo, 5> foos( as );
这可能吗?如果是的话,怎么办?
如果向
Foo
添加默认构造函数,则可以使用立即调用的 lambda 和 std::transform
与 std::identity
的组合:
#include <algorithm>
#include <array>
class Foo
{
public:
Foo() = default;
Foo(int a) : a_(a) { }
private:
int a_;
};
int main() {
std::array<int, 5> as = { 1, 8, 3, 0, 12 };
const std::array<Foo, 5> foos =
[&]() -> auto
{
std::array<Foo, 5> foos_tmp;
std::transform(as.begin(), as.end(), foos_tmp.begin(), std::identity{});
return foos_tmp;
}();
};