最佳实践C :多种方法的重用默认参数
Best practice C++: Reuse default arguments for multiple methods
给定一个具有不同函数的标头文件(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
却没有(不幸的是,您需要使用该子句以使在继承类中可见过重载)。
旁注:我不是在说第一种方法是错误的还是不好的,我只是在显示替代方案...
相关文章:
- 如何使用默认参数等选择模板专业化
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 何时提供默认参数作为模板参数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 函数不接受 X 参数,函数使用默认参数
- initializer_list具有默认参数的构造函数
- C++ 带有默认参数的结构,可选择在构造函数中更改
- 为什么C++构造函数在继承中需要默认参数?
- 必须非常量别名参数及其默认参数常量
- C++ 默认参数使用其他参数
- 组合函数参数包和默认参数
- 如何定义 Vector2f 的默认参数?[SFML]
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 使用具有默认参数的函数模板进行 decltype 会使结果混乱(一个有趣的问题或 gcc 的错误)
- 如何设置默认参数以防用户不输入另一个参数
- 结构 c++ 中的默认参数
- 构造函数委托与默认参数
- 默认参数和函数指针作为函数参数C++
- 如何在继承层次结构中调用具有默认参数的构造函数?