如果我有一个带有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/

10-11 00:35