我有一个关于 C++ 中“良好设计实践”的问题。我正在用 C++11 编写一个数值库,并且我使用了大量的元编程和基于模板的技术。但我有一个非常基本的问题:
考虑一个可以有两个非常接近的行为的函数,除了一个可以由布尔标志激活的选项。我只考虑开发人员可以设置/取消设置的标志,而不考虑可以在运行时设置/取消设置的标志。有3种设计可能性:
1) 编写两个名称中带有显式选项的函数:
myFunctionFlag1(...);
myFunctionFlag2(...);
2)使用模板参数:
template<bool Flag> myFunction(...);
3)使用可变参数:
myFunction(..., const bool flag);
就良好的设计实践而言,哪种解决方案可以接受/不可接受?如果有最好的解决方案,它是哪一个,为什么?如果有最坏的解决方案,它是哪一个,为什么?
编辑:对于所考虑的函数,运行时开销可以被认为是微不足道的,所以这不是最关键的一点。
编辑2:我知道这三个都有效。但由于我的图书馆会有用户,它需要有一个可靠/好的设计。
选项 2 是否常见(因为在我看来这是一个很好的折衷方案)?