将布尔变量作为参数传递的更好方法?

新手上路,请多包涵

我想知道是否有更好的方法来编写它以获得更好的可读性。如果您有如下功能,

 void animal(bool hasFourLegs, bool hasHead, bool hasBody);

当你调用这个函数时,你最终会得到类似的东西

animal(true, false, true);

这让我每次遇到这样的函数时都去看看定义。

所以…

我做这样的事情!

 const bool HAS_FOURLEGS = true;
const bool NO_HEAD = false;
const bool HAS_BODY = true;

animal(HAS_FOURLEGS, NO_HEAD, HAS_BODY);

但我不喜欢每次调用函数时都声明 const bool

似乎CPP不支持类似的东西

animal(bool hasFourlegs = true, bool hasHead = false, bool hasBody = true);

有没有更好更短的方法?

原文由 Eddie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 552
2 个回答

当我遇到与此相关的问题时,我有时会创建一个 enum 即使只有 2 个预期的选择:

例如,代替以下函数声明:

 bool search(..., bool recursive);

我会去:

 enum class SearchOpt
{
    Recursive,
    NonRecursive
};

bool search(..., SearchOpt opt);

因此,调用语法从:

 bool found = search(..., true);

至:

 bool found = search(..., SearchOpt::Recursive);

注意:这避免了每次调用函数时都必须创建自己的常量。

编辑

正如其他人所建议的那样,与其为每个选项设置单独的 bool s,从而为每个选项设置一个单独的 enum ,不如将单个 enum 配置为位标志。

原文由 James Adkison 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用标志:

   enum {
    HAS_LEGS = 0x01,
    HAS_HEAD = 0x02,
    HAS_BODY = 0x04,
  };

  void animal(int properties);

  animal(HAS_LEGS | HAS_HEAD);

原文由 Kamajii 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题