如果我有一个带有2个必需参数和4个可选参数的构造函数,那么我应该如何避免编写16个构造函数,甚至避免使用默认参数时必须编写的10个左右构造函数(我不喜欢,因为它很差)自我证明)?有没有使用模板的惯用法或方法,可以减少使用乏味? (更容易维护吗?)
最佳答案
您可能对Named Parameter Idiom感兴趣。
总而言之,创建一个类,其中包含要传递给构造函数的值。添加一个方法来设置每个值,并让每个方法在末尾执行一个return *this;
。在您的类中有一个构造函数,该构造函数对此新类进行const引用。可以这样使用:
class Person;
class PersonOptions
{
friend class Person;
string name_;
int age_;
char gender_;
public:
PersonOptions() :
age_(0),
gender_('U')
{}
PersonOptions& name(const string& n) { name_ = n; return *this; }
PersonOptions& age(int a) { age_ = a; return *this; }
PersonOptions& gender(char g) { gender_ = g; return *this; }
};
class Person
{
string name_;
int age_;
char gender_;
public:
Person(const PersonOptions& opts) :
name_(opts.name_),
age_(opts.age_),
gender_(opts.gender_)
{}
};
Person p = PersonOptions().name("George").age(57).gender('M');
关于c++ - 避免乏味的可选参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2700940/