最佳实践C :多种方法的重用默认参数

Best practice C++: Reuse default arguments for multiple methods

本文关键字:默认 参数 方法 最佳      更新时间:2023-10-16

给定一个具有不同函数的标头文件(function1和function2):共享相同默认参数的最佳实践是什么?

class MyClass {
    public:
        virtual ... function1(..., int param1 = 48, int param2 = getStuff(99)) = 0;
        virtual ... function2(..., int param1 = 48, int param2 = getStuff(99)) = 0;
}

使用

之类的东西
#define PARAM1 = 48
#define PARAM2 = getStuff(99)

似乎不便。我是C 的新手,所以在这种情况下,我不知道最好的做法是什么。我应该在myClass内部创建一些私人常数吗?

您可以做:

class MyClass {
public:
    void function1(int param1 = default_param1, int param2 = default_param2());
    void function2(int param1 = default_param1, int param2 = default_param2());
private:
    static const int default_param1 = 48;
    static int default_param2() { return getStuff(99); } // assuming it might change
};

我看到您的功能是虚拟的 - 请注意,默认参数未继承!

int getStuff(int n)
{
    return n;
}
class MyClass
{
public:
    static constexpr int DefaultParam1 = 48;
    static constexpr int DefaultParam2 = 99;
    virtual ~MyClass() = default;
    virtual void function1(int param1 = DefaultParam1, int param2 = DefaultParam2) = 0;
    inline void function2()
    {
        function1(getStuff(DefaultParam1), getStuff(DefaultParam2));
    }
    inline void function2(int param1)
    {
        function1(param1, getStuff(DefaultParam2));
    }
    virtual void function2(int param1, int param2) = 0;
};

在我的示例中查看函数2,它被内联函数重载。优势:

class MC : public MyClass
{
public:
    virtual void function1(int param1, int param2)
    {
    }
    using MyClass::function2;
    virtual void function2(int param1, int param2)
    {
    }
};
int main()
{
    MC mc;
    ((MyClass&)mc).function1();
    mc.function2();
    return 0;
}

function1要求将铸件与默认参数一起使用(不在继承类中重复它们), function2却没有(不幸的是,您需要使用该子句以使在继承类中可见过重载)。

旁注:我不是在说第一种方法是错误的还是不好的,我只是在显示替代方案...