如果我有:
Class SomeClass{
private:
int a;
char* name;
public:
SomeClass(int a = 0, char* n = "---"){
...
}
};
Class OtherClass{
private:
SomeClass anArray[100];
int counter;
...
public:
...
};
如何初始化SomeClass类型的数组?据我所知,当你有一个属于用户定义类的私有成员时,要初始化它你应该把它包含在构造函数中
OtherClass(...):SomeClass(...){
...
}
但是,数组的内容留待用户输入,因此它们太难以预测,并且显然无法为每个字段手动输入默认值。
答案 0 :(得分:0)
鉴于你的SomeClass
有一个默认构造函数,你不需要任何东西:默认构造函数将调用每个元素。你想明确提一下它可以用
OtherClass::OtherClass()
: anArray() {
}
如果要使用显式构造函数调用初始化元素序列并将其键入,则可以使用委托构造函数,使用适当大小std::index_sequence<...>
并使用元素的聚合初始化。以下是完整的示例:
#include <iterator>
#include <algorithm>
#include <iostream>
struct S {
int value;
S(int value): value(value) {}
};
std::ostream& operator<< (std::ostream& out, S const& s) {
return out << s.value;
}
template <typename S, typename T, std::size_t Size>
constexpr std::size_t static_size(T (S::*)[Size]) {
return Size;
}
class T {
S array[100];
template <std::size_t... I>
T(std::index_sequence<I...>): array{ S(I)... } {}
public:
T(): T(std::make_index_sequence<static_size(&T::array)>()) {}
S const* begin() const { return std::begin(array); }
S const* end() const { return std::end(array); }
};
int main()
{
T t;
std::copy(t.begin(), t.end(), std::ostream_iterator<S>(std::cout, " "));
}