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来构造这个数组,该ctor接受一些参数,如果它们都被构造成相同的值,那就没关系,因为稍后我将为它们分配正确的值我只需要初始化它。我用谷歌搜索了这个并尝试了许多不同的语法,但由于某些原因我无法做到正确。
答案 0 :(得分:3)
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元素。
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元素的构造函数。
将{c}默认ctor添加到Bar
。
修改此项以获取单个Bar
并制作800份副本也不难:您只需要将Bar
传递给最终函数,然后使用它来制作新元素。
答案 1 :(得分:1)
问题是Bar
没有默认构造函数,因此std::array<Bar>
也没有。{/ p>
如果您向Bar
添加默认构造函数,std::array<Bar>
也会有一个:
#include <array>
using namespace std;
typedef int var1, var2;
class Bar
{
public:
Bar() {} // <--------- HERE
Bar( var1 v1, var2 v2 )
{
// setup Bar fields
}
// bar fields
};
class Foo
{
Foo()
:
mArray()
{
}
std::array<Bar, 3> mArray;
};