跳转到内容

更多 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;
}

已知用途

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]

参考文献

[编辑 | 编辑源代码]
华夏公益教科书