【问题标题】:Creating a variable type similar to bool创建类似于 bool 的变量类型
【发布时间】:2020-05-10 16:38:29
【问题描述】:

我需要帮助,因为我需要使用行为类似于 bool 但允许“未定义”值 (x) 的变量类型。 我不认为这种类型存在。我想我应该为这种新类型编写一个类,并使用这个类的对象作为我的变量。 我不太擅长编码(我在学校做这个),所以我对同一类的对象如何相互交互感到困惑。

我的意思是:如果我有两个布尔变量,我知道如果我需要知道“a AND b”的结果,我可以写“c = a && b”,就是这样。 但这对一堂课如何工作?我是否必须为每个可能的操作编写一个类方法? 这些函数的参数是什么?我认为它可能是该类的两个对象,但我不知道这是否有意义。

我非常感谢任何形式的帮助。

对不起,我的英语和编码能力很差。

【问题讨论】:

  • std::optional<bool. 是否符合您的要求?可以是truefalse或“无价值”
  • std::optional<>C++ 17 功能。鉴于 OP 用她自己的话说是编程新手,我相信它可能不是推荐的最佳解决方案。

标签: c++ class object boolean


【解决方案1】:

签出Boost tribool类型。

它代表所有truefalseundefined状态。

它或多或少类似于std::optional<bool>。你也可以在一个类中自己实现它。您需要了解 operator overloading 的工作原理。

class SpecialBoolean {
public:
  SpecialBoolean() : state(Undefined) {}
  SpecialBoolean(bool value) : state(value? True : False) {}

  SpecialBoolean operator&& (SpecialBoolean other) const {
    if( state == Undefined || other.state == Undefined)
      return SpecialBoolean();
    else
      return SpecialBoolean(state == True && other.state == True);
  }
private:
  enum States { False = 0, True = 1, Undefined = 2 };
  States state;
};

// Test:
SpecialBoolean value = SpecialBoolean() && SpecialBoolean(false);

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多