如何在构造函数中初始化成员数组? 成员数组是用户定义对象的数组(类)。 此外,数组中的元素数量可能大于100,因此我不喜欢使用C++11中提供的初始化列表(除非有更好的方法)
例如,请参考以下代码:
class Foo {
private:
void *a;
int b;
public:
Foo(void *, int);
~Foo();
}
class Bar {
private:
Foo mObj[150];
public:
Bar();
~Bar();
};
Bar::Bar() {
// ???
}
为了简单起见,假设我想按如下方式初始化成员:假设成员int b存储sr.no&; void*从现在起存储空ptr.。。 所以mobj[0]={0,nullptr},mobj[1]={1,nullptr}&; 依此类推。
从注释来看,当前的最终任务似乎是用参数(i,nullptr)
为数组的每个元素调用foo
构造函数,其中i
在每次迭代时从0增加到N。
下面是使用std::index_sequence
执行此操作的代码。 这只是在C++14中引入的,所以如果您不使用它,您将不得不自己实现它,这一点也不难--如果您需要帮助,请告诉我。
#include <array>
#include <utility>
#include <cstddef>
struct Foo {
Foo(void*, int);
};
class Bar {
private:
static constexpr size_t array_sz = 150;
template<size_t... Ix> Bar(std::index_sequence<Ix...> ) :
mObj{Foo{nullptr, Ix}...} { }
std::array<Foo, array_sz> mObj;
public:
Bar();
~Bar();
};
Bar::Bar() : Bar(std::make_index_sequence<array_sz>{}) { }