【问题标题】:Better way to handle mulitple boolean variables in function call在函数调用中处理多个布尔变量的更好方法
【发布时间】:2014-06-24 17:10:54
【问题描述】:

逻辑是用一些输入值调用一个函数,函数返回多个布尔变量。

未来布尔变量可能会被扩展。

function(inp1,inp3,bool1,bool2... booln)

我决定将布尔变量打包到结构中

function(inp1,inp3,struct bool_flags)

请帮助我进行有效的设计

【问题讨论】:

  • 您需要std::optional 吗?
  • std::bitset 有什么问题?
  • 看来您正在做类似于权限标志的事情。为什么不使用 int 或 byte 并将每个数字设置为 1 或 0?然后使用按位运算,您可以判断哪个部分是真或假。
  • 或者使用带有位域的结构。
  • 如您所见,有很多方法可以做到这一点。请展示您尝试过的方法,我们将帮助您使其发挥作用。

标签: c++ function design-patterns boolean


【解决方案1】:

由于问题不清楚,我不太确定您要在这里完成什么,但我有一个想法。您可以将所有布尔值打包成uintulong。然后,变量的每一位都是一个布尔值。您可以像这样读取布尔值:

uint bools;
bool bool0 = bools & 1;
bool bool1 = (bools >> 1) & 1;
etc...

你可以这样写布尔值:

bools |= bool0;
bools |= bool1 << 1;
etc...

这是通过对值进行逻辑移位、与运算和或运算来实现的。 C++ 中的布尔值是 1 或 0。因此,要读取,移动“容器”变量,然后移动 &amp; 布尔值。要编写,您可以将 bool 值和| 与“容器”一起移动。

唯一的缺陷是 int 仅限于 32 位,而 long 仅限于 64 位。如果需要,您可以创建一个 ints 或 long 结构,以便更有效地打包。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多