場景:類的配置數據多并且形式多變,這樣構造函數的樣式就會膨脹。由于配置數據不需要修改,因此也不適合采用先創建再添加修改的方式,此外這個方式分成多步,缺失連貫性。
方法:使用一個輔助類,用于構建多樣的參數。其數據添加函數可返回自身引用,用于連續添加數據。然后將輔助類作為主類的構造函數的參數。如
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;
};