rsk*_*k82 2 c++ function named-parameters
那个案子怎么不迷路呢?例如,这是一个返回bool的函数,但需要10个参数:
bool myFunc(bool par1 = true, bool par2 = false, bool par3 = true,
bool par4 = true /* and so on */ ) {}
Run Code Online (Sandbox Code Playgroud)
并且假设函数参数设置为90%的默认情况.但偶尔客户端代码只想改变其中的一小部分.我在这里看到的唯一选择是精心复制所有默认参数,直到我们找到需要更改的参数.有可能以这种方式调用此函数:
bool myVal = myFunc(par10 = true, par20 = false);
Run Code Online (Sandbox Code Playgroud)
因此,任何阅读代码的人都知道代码的内容(参数的名称很长但很有意义),而且当我更改函数定义时,无论何时调用它来更新默认参数,我都不需要查看?
Mat*_* M. 11
有一个中等名气的成语:命名参数成语.
这个想法很简单:
class Parameters {
public:
Parameters(): _1(true), _2(false), _3(true), _4(true) {}
bool get1() const { return _1; }
bool get2() const { return _2; }
bool get3() const { return _3; }
bool get4() const { return _4; }
Parameters& set1(bool t) { _1 = t; return *this; }
Parameters& set2(bool t) { _2 = t; return *this; }
Parameters& set3(bool t) { _3 = t; return *this; }
Parameters& set4(bool t) { _4 = t; return *this; }
private:
bool _1;
bool _2;
bool _3;
bool _4;
};
bool myFunc(Parameters p);
Run Code Online (Sandbox Code Playgroud)
然后客户端可以这样做:
result = myFunc(Parameters());
Run Code Online (Sandbox Code Playgroud)
要么:
result = myFunc(Parameters().set4(false));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |