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的更多相关文章

  1. boost开发指南

    C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...

  2. Boost简介

    原文链接:  吴豆豆http://www.cnblogs.com/gdutbean/archive/2012/03/30/2425201.html Boost库 Boost库是为C++语言标准库提供扩 ...

  3. Boost 1.61.0 Library Documentation

    http://www.boost.org/doc/libs/1_61_0/ Boost 1.61.0 Library Documentation Accumulators Framework for ...

  4. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  5. boost库的安装,使用,介绍,库分类

    1)首先去官网下载boost源码安装包:http://www.boost.org/ 选择下载对应的boost源码包.本次下载使用的是 boost_1_60_0.tar.gz (2)解压文件:tar - ...

  6. C++ Boost库分类总结

    c# 程序员写c++,各种不适应.尤其是被内存操作和几十种字符串类型的转换,简直疯了,大小写转换竟然要手动写代码实现. Boost看介绍不错,也不知道能不能跨平台.过几天要上linux写c++, 也不 ...

  7. Boost 常用的库

    boost是一系列C++模板库组成的免费,可移植,开源的程序库.网络上关于boost的文章已经很多.     这里摘记一些库的信息,供自己日后参考. 0.foreach - BOOST_FOREACH ...

  8. boost 介绍

    简介: Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容 ...

  9. 为 CmakeLists.txt 添加 boost 组件

    目录 为 CmakeLists.txt 添加 boost 组件 Boost 常用组件 1.时间与日期 timer, date_time, chrono 2.内存管理 system 3.实用工具库 4. ...

随机推荐

  1. Java开发笔记(一百三十三)Swing的菜单

    传统的桌面程序基本是对某种类型的文件进行加工,例如Window自带的记事本用来读写文本文件,自带的画图程序用来查看和修改位图文件.为了方便用户切换各种操作,这些程序在窗口顶端放了一排菜单栏,单击菜单栏 ...

  2. python 读取环境变量

    python 读取环境变量 前言 在使用python时候千万不要把账户密令直接写入脚本,特别是当你计划开源自己的作品时. 为了保护账户信息,你需要让脚本从环境中导入敏感信息. 读取方法 import ...

  3. Crontab详细用法-定时任务详解

    crontab是linux系统或unix系统中常用的定时命令,使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux/unix命令.例如系统管理员安排一个备份任务使其每天都运行 ...

  4. drf安装与APIView初步分析

    drf安装 1. pip install djangorestframework 2. 在settings文件中注册app : INSTALLED_APPS = [..., 'rest_framewo ...

  5. FreeRTOS优先级翻转

    举例 //高优先级任务的任务函数 void high_task(void *pvParameters) { while(1) { vTaskDelay(500); //延时500ms,也就是500个时 ...

  6. datatables 自定义排序

    参考:https://datatables.net/examples/plug-ins/sorting_manual $.fn.dataTable.ext.type.order['salary-gra ...

  7. python 笔记二

    17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event ...

  8. RabbitMQ topic 交换器

    topic交换器:"."将路由键分为几个标识符,"*"匹配一个, "#"可以匹配多个 1:路由键为*或者#的时候 *:只能匹配单个的字符串 ...

  9. spark 机器学习 决策树 原理(一)

    1.什么是决策树 决策树(decision tree)是一个树结构(可以是二叉树或者非二叉树).决策树分为分类树和回归树两种,分类树对离散变量做决策树,回归树对连续变量做决策树. 其中每个非叶节点表示 ...

  10. kubernetes使用Traefik暴露web服务-转载51cto

    Traefix介绍(摘自网络) traefik 是一个前端负载均衡器,对于微服务架构尤其是 kubernetes 等编排工具具有良好的支持:同 nginx 等相比,traefik 能够自动感知后端容器 ...