c++ - 语言设计: default method parameters inheritance

标签 c++

我认为,有一种常见的情况,当一个函数(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);
    // ...
}

但这违反了DRY原则。当“a”的默认参数更改但“b”中的默认参数未更改时,它可能会导致一个微妙的错误:

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);
    // ...
}

为什么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);
    // ...
}

是否有语言具有这样的语法?

这可能是这个板上的题外话?

最佳答案

问题实际上是魔数(Magic Number)的使用。如果删除魔数(Magic Number),问题就很好解决了。

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);
    // ...
}

关于c++ - 语言设计: default method parameters inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18348253/

相关文章:

c++ - 在if语句中需要帮助

c++ - undefined reference : dll -> free function -> overloaded operator -> templated struct

c++ - 有什么方法可以在无向/有向图中快速找到属于循环(后边)的所有边?

c++ - 如果 vec.size() == 0,vec.data() 会返回什么?

c++ - "void"c++ 之前的预期主表达式

c++ - 输出打印地址而不是 3D 数组指针中的值

C++ 使用多态复制对象

c++ - 无法在两个函数之间复制值

c++ - 如何增加指向 char 数组的指针的位置?

c++ - 两个具有相同值的枚举,如何访问它们?