更多 C++ 惯用法/命名参数
外观
模拟在其他语言中找到的命名(键值对)参数传递风格,而不是基于位置的参数。
方法链,流畅接口
当函数接受多个参数时,程序员必须记住类型和传递参数的顺序。此外,默认值只能赋予最后一个参数,因此无法指定后一个参数并对先前参数使用默认值。命名参数允许程序员以任何顺序将参数传递给函数,并且这些参数由名称区分。因此,程序员可以显式地传递所有必要的参数和默认值,而无需担心函数声明中使用的顺序。
命名参数惯用法使用代理对象来传递参数。函数的参数被捕获为代理类的成员数据。该类为每个参数公开设置方法。设置方法按引用返回 *this* 对象,以便其他设置方法可以链接在一起以设置剩余的参数。
class X
{
public:
int a;
char b;
X() : a(-999), b('C') {} // Initialize with default values, if any.
X & setA(int i) { a = i; return *this; } // non-const function
X & setB(char c) { b = c; return *this; } // non-const function
static X create() {
return X();
}
};
std::ostream & operator << (std::ostream & o, X const & x)
{
o << x.a << " " << x.b;
return o;
}
int main (void)
{
// The following code uses the named parameter idiom.
std::cout << X::create().setA(10).setB('Z') << std::endl;
}
- 命名参数惯用法,Marshal Cline