我在C++中有一个"好的设计实践"的问题.我正在用C++ 11编写一个数值库,我使用了大量的元编程和基于模板的技术.但我有一个非常基本的问题:
考虑一个可以有两个非常接近的行为的函数,除了可以通过布尔标志激活的选项.我只考虑开发人员可以设置/取消设置的标志,而不是可以在运行时设置/取消设置的标志.有3种设计可能性:
1)在名称中使用explicit选项编写两个函数:
myFunctionFlag1(...);
myFunctionFlag2(...);
Run Code Online (Sandbox Code Playgroud)
2)使用模板参数:
template<bool Flag> myFunction(...);
Run Code Online (Sandbox Code Playgroud)
3)使用变量参数:
myFunction(..., const bool flag);
Run Code Online (Sandbox Code Playgroud)
在良好的设计实践方面,哪种解决方案可接受/不可接受?如果有最佳解决方案,那是哪一个?为什么?如果有一个最糟糕的解决方案,那是哪一个?为什么?
编辑:对于所考虑的函数,运行时开销可以被认为是可以忽略不计的,因此这不是最关键的一点.
编辑2:我知道所有三个工作.但是由于我的图书馆将拥有用户,因此需要有可靠/优秀的设计.
选项2是否常见(因为在我看来这是一个很好的妥协)?
Jam*_*lis 11
以上都不是.布尔标志对于代码可读性来说很糟糕.如果标志控制的功能足够小,使用单个函数是有意义的,那么使用单个函数,但不要bool用作标志的类型.相反,使用具有有用名称的枚举器的枚举:
enum class MyFunctionMode { EnableFoo, DisableFoo };
void myFunction(..., MyFunctionMode mode);
Run Code Online (Sandbox Code Playgroud)
这种模式使得在呼叫站点易于理解为该功能提供了哪些选项.可以使用标志组合多个选项.
| 归档时间: |
|
| 查看次数: |
760 次 |
| 最近记录: |