class Y; //not really relevant
class B
{
B(Y*);
//stuff
}
template<int SIZE> class X : public Y
{
B array[SIZE];
X();
}
我想用array作为参数调用array []的每个元素的构造函数。我怎么能以漂亮的方式做到这一点? C ++ 14甚至17对我来说都没问题。
答案 0 :(得分:2)
没有&#34;很好&#34;或者使用C数组(甚至std::array
)进行简单的方法。
如果您改为使用std::vector
,则可以非常轻松地使用它。它有constructor,允许您设置大小和传递所有元素的默认值:
template<int SIZE> class X : public Y
{
std::vector<B> array;
X()
: array(SIZE, B(this))
{}
};
答案 1 :(得分:2)
几种方法之一:
template <int SIZE>
class X : public Y
{
B array[SIZE];
template <std::size_t>
X* that() { return this; } // don't abuse the comma operator
template <std::size_t... Is>
X(std::index_sequence<Is...>) : array{ that<Is>()... } {}
public:
X() : X(std::make_index_sequence<SIZE>{}) {}
};