场景:类的配置数据多并且形式多变,这样构造函数的样式就会膨胀。由于配置数据不需要修改,因此也不适合采用先创建再添加修改的方式,此外这个方式分成多步,缺失连贯性。
方法:使用一个辅助类,用于构建多样的参数。其数据添加函数可返回自身引用,用于连续添加数据。然后将辅助类作为主类的构造函数的参数。如
class BigClass {
public:
class Param {
friend class BigClass;
public:
Param() {}
Param& Add(int d) {
m_Data.push_back(d);
return *this;
};
Param& Add(const char* s) {
m_Data.push_back(atoi(s));
return *this;
}
protected:
std::vector<int> m_Data;
};
public:
BigClass(const Param& p) : m_Data(p.m_Data) { }
protected:
std::vector<int> m_Data;
};
int main()
{
BigClass bc(BigClass::Param().Add(1).Add("12").Add(3));
return 0;
};