我认为,当一个函数(a)从另一个函数(b)中调用时,有一个常见的情况,而'a'有一些默认参数,需要'b'来支持它们.例如:
void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
// ...
a(v1, v2, v3);
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这违反了DRY原则.当'a'的默认参数被更改但是在'b'中没有改变时,它可以导致一个细微的bug:
void a(int v1, int v2, int v3=0);
void b(int m1, int m2, int v1, int v2=0, int v3=1) {
// ...
a(v1, v2, v3);
// ...
}
Run Code Online (Sandbox Code Playgroud)
为什么C++中没有机制来继承默认参数值?它可能看起来像:
void a(int v1, int v2=0, int v3=1);
void b(int m1, int m2, int v1, int v2=default(a::v2, 0), int v3=default(a::v3, 1)) {
// ...
a(v1, v2, v3);
// ...
}
Run Code Online (Sandbox Code Playgroud)
是否有语言,有这样的语法?
这可能是这块板上的一个偏见?
问题实际上是魔术数字的使用.如果删除幻数,问题就会得到很好的解决.
enum DefaultA { DefaultA_v2 = 0, DefaultA_v3 = 1 };
void a(int v1, int v2=DefaultA_v2, int v3=DefaultA_v3);
void b(int m1, int m2, int v1, int v2=DefaultA_v2, int v3=DefaultA_v3) {
// ...
a(v1, v2, v3);
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |