码迷,mamicode.com
首页 > 其他好文 > 详细

boost.tribool

时间:2019-12-21 18:47:02      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:class   初始   初始化   任务   需要   创建   混合   一起   空间   

tribool

boost.tribool类似c++内建的bool类,但基于三态的布尔逻辑,在true和false之外还有一个indeterminate状态。一个例子场景是执行某项任务,在执行之前状态时未知的,启动任务后状态时true,停止任务状态时false.

tribool位于名字空间boost::logic,当为了方便使用,需要包含头文件<boost/logic/tribool.hpp>:

#include <boost/logic/tribool.hpp>
using namespace boost;

类摘要:

class tribool
{
    public:
    tribool(bool value);            //缺省构造函数
    tribool(bool initial_value);    //bool值构造函数
    tribool(indeterminate_keyword_t);//初始化为不确定值
    
    operator safe_bool() const; //bool转型
    
    enum value_t { false_value,true_value,indeteeminate_value } value;
};
bool indeterminate(tribool x);

tribool operator!(tribool x);
...

tribool类内部实现了三态bool值得表示,除了构造函数没有其他成员函数,可以在创建tribool对象的同事传入三态bool值对它进行初始化,如果使用无参的缺省构造函数,tribool默认值是false.

对tribool的操作都是通过逻辑运算符和比较运算符的重载来完成的,支持的逻辑运算符包括||,&&和!= ,这些操作都可以任意混合bool和tribool一起运算.

不确定状态indeterminate是一个特殊的tribool值,它与bool值true,false的运算遵循三态不二逻辑:

  • 任何与indeterminate的比较操作结果都是indeterninate
  • 与iddeterminate的逻辑或运算(||)只有与true运算结果为true,其他均为indeterminate
  • 与indeterminate的逻辑与运算(&&)只有与false运算结果为false,其他均为indeterminate
  • indeterminate的逻辑非操作(!)结果仍为indeterminate
    自由函数indeterminate()可以判断一个tribool是否处于不确定状态。
    用法:

    #include <boost/logic/tribool.hpp>
    using namespace std;
    
    int main()
    {
        tribool tb(true);
        tribool tb2(!tb);
    
        if(tb)
        {
            cout<<"true"<<endl;
        }
        tb2 = indeterminate;
        assert(indeterminate(tb2));
        cout<<tb2<<endl;
    
        if(tb2 == indeterminate)
        {
            cout<<"indeterminate"<<endl;
        }
        if(indeterminate(tb2))
        {
            cout<<"indeterminate"<<endl;
        }
        cout<<(tb2 || true)<<endl;
        cout<<(tb2 && false)<<endl;
    }

    在处理tribool的不确定状态时需要小心,因为他不是true也不是false,使用它进行条件判断永远不会成立,判断不确定状态需要使用indeterminate()函数。

boost.tribool

标签:class   初始   初始化   任务   需要   创建   混合   一起   空间   

原文地址:https://www.cnblogs.com/kloseer/p/12077716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!