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
.
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 元素的构造函数。
或者将默认 ctor 添加到Bar
.
将其修改为单个Bar
并制作 800 个副本也不难:您所需要的只是传递Bar
到最终函数,然后使用它来制作新元素。