gpt4 book ai didi

C++ 设计 : functions with boolean options

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:06 29 4
gpt4 key购买 nike

我有一个关于 C++ 中“良好设计实践”的问题。我正在用 C++11 编写一个数字库,我使用了很多元编程和基于模板的技术。但我有一个非常基本的问题:

考虑一个函数,它可以有两个非常接近的行为,除了一个可以由 boolean 标志激活的选项。我只考虑一个可以由开发人员设置/取消设置的标志,而不是一个可以在运行时设置/取消设置的标志。设计有 3 种可能性:


1) 编写两个在名称中带有显式选项的函数:

myFunctionFlag1(...);
myFunctionFlag2(...);

2) 使用模板参数:

template<bool Flag> myFunction(...);

3) 使用可变参数:

myFunction(..., const bool flag);

就良好设计实践而言,哪种解决方案是可接受的/ Not Acceptable ?如果有最佳解决方案,它是哪一个,为什么?如果有最坏的解决方案,它是哪一个,为什么?

编辑:对于所考虑的功能,运行时开销可以忽略不计,因此这不是最关键的一点。

编辑 2:我知道这三个都有效。但由于我的图书馆会有用户,它需要有可靠/良好的设计。

选项 2 是否常见(因为在我看来这是一个很好的折衷方案)?

最佳答案

以上都不是。 boolean 标志对于代码可读性来说很糟糕。如果标志控制的功能足够小以至于使用单个函数有意义,则使用单个函数,但不要使用 bool 作为标志的类型。相反,使用具有有用名称的枚举器的枚举:

enum class MyFunctionMode { EnableFoo, DisableFoo };

void myFunction(..., MyFunctionMode mode);

这种模式使得在调用站点很容易理解为函数提供了哪些选项。可以使用标志组合多个选项。

关于C++ 设计 : functions with boolean options,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715301/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com