gpt4 book ai didi

c++ - std::array 作为字段的语法是什么,里面的对象必须用带参数的 ctor 构造?

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

class Bar
{
Bar( var1 v1, var2 v2 )
{
// setup Bar fields
}
// bar fields
}

class Foo
{
Foo()
:
mArray();// how to do this part
{

}
std::array<Bar, 800> mArray;
}

我需要使用 bar 提供的接受一些参数的 ctor 用一些值构造这个数组,如果它们都构造为相同的值就可以了,因为稍后我会给它们分配适当的值我只需要初始化它.我用谷歌搜索了这个并尝试了许多不同的语法,但出于某种原因我无法正确使用它。

最佳答案

template<unsigned...>struct seq {};
template<unsigned max, unsigned... s>struct make_seq:make_seq<max-1,max-1,s...>{};
template<unsigned...s>struct make_seq<0,s...>:seq<s...>{};

上面给出了编译时序。

然后我们可以使用它为您的 array 生成一个 800 元素的 ctor。

 template<unsigned N> Bar make_bar();
template<unsigned N,unsigned...s>
std::array<Bar,N> make_array_helper( seq<s...> ){
return { make_bar<s>()... };
}
template<unsigned N>
std::array<Bar,N> make_array(){
return make_array_helper( make_seq<N>() );
}

...可能包含拼写错误(在电话上),您必须编写 make_bar,但它会为您创建包含 800 个条的数组。其核心是制作一个800个元素的参数包,然后解包生成一个800个元素的构造函数。

或者将默认构造函数添加到 Bar

将其修改为采用单个 Bar 并制作 800 个拷贝也不难:您只需将 Bar 传递给最终函数,然后使用它制作新元素。

关于c++ - std::array 作为字段的语法是什么,里面的对象必须用带参数的 ctor 构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514255/

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