#include <vector>
#include <deque>
#include <iostream>
#include <array>
#include <string>
#include "boost/optional.hpp"
#include "boost/variant.hpp" using namespace std; deque<char> queue; //
//char get_async_data() {
// if (!queue.empty())
// return queue.back();
// else
// return '\0'; // 空的时候返回什么?返回'\0'是一个非法的字符
//} //这时候就该optional出马了
boost::optional<char> get_async_data() {
if (!queue.empty())
return boost::optional<char>(queue.back());
else
return boost::optional<char>();
} int main() {
// 可以使用:
boost::variant<nullptr_t, char> v; // 或者optional:
boost::optional<char> op; // op没有进行初始化,没有char被构造
//op.get(); // 断言失败
op = 'A'; op = get_async_data();
if (!op) // 同: if (op != 0),判断是否初始化
cout << "op is not initialized" << endl;
else {
cout << "op contains " << op.get() << endl; // get()要求op已经初始化,否则会崩(断言失败)
cout << "op contains " << *op << endl; // 跟get()一样
} // 如果不想要if/else的判断
op.reset(); // 将op重置为未初始化状态
cout << op.get_value_or('z') << endl; // 如果op未初始返回'z',否则返回*op // 或者
char* p = op.get_ptr(); // 返回保存值的一个指针,如果未初始化返回空指针 // optional可以储存任何类型的数据
struct A {string name; int value;};
A a;
boost::optional<A> opA; // 没有构造
boost::optional<A> opA(a); //构造
cout << opA->name << " " << opA->value << endl; // 指针
boost::optional<A*> opAP(&a);
cout << (*opAP)->name << " " << (*opAP)->value << endl; // 引用
boost::optional<A&> opAR(a);
opAR->name = "Bob"; // // 关系运算符
boost::optional<int> oInt1(9);
boost::optional<int> oInt2(1);
if (oInt1 < oInt2)
cout << "oInt1 is bigger" << endl; // 如果两者都初始化了,比较其值
// 否则,认为未初始化的最小 // optional没有建模为指针!!!
}

Boost--optional的更多相关文章

  1. C++ 中关于optional 使用过程中遇到的问题

    头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...

  2. Boost LRU-Cache使用方法简介

    缓存是提高系统运行效率的常用组件,可以将"有效的"业务数据直接返回用户,避免繁琐的计算过程.除了Redis.MemCache等常用缓存系统,应用程序内部也可以根据需要设置一定容量的 ...

  3. optional的使用

    :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...

  4. Boost filessystem...

    CMakeList.txt: cmake_minimum_required(VERSION 3.8) project(Demo) ) set(SOURCE_FILES main.cpp) //需要添加 ...

  5. boost-实用工具:noncopyable、optional、assign

    1.noncopyable 让一个类从noncopyable继承可以实现禁止对象的复制,使用需要包含头文件"boost/noncopyable.hpp"或"boost/u ...

  6. c++11实现c++14的optional

    c++14中将包含一个std::optional类,它的功能和用法和boost的optional类似.optional<T>内部存储空间可能存储了T类型的值也可能没有存储T类型的值,只有当 ...

  7. C++17 新特性之 std::optional(上)

    最近在学习 c++ 17 的一些新特性,为了加强记忆和理解,把这些内容作为笔记记录下来,有理解不对的地方请指正,欢迎大家留言交流. 引言 在介绍之前,我们从一个问题出发,C++ 的函数如何返回多个值? ...

  8. boost propertyTree

    Boost PropertyTree provides a tree structure to store key/value pairs. Tree structures means that a ...

  9. 使用Condition Variables 实现一个线程安全队列

    使用Condition Variables实现一个线程安全队列 测试机: i7-4800MQ .7GHz, logical core, physical core, 8G memory, 256GB ...

  10. c++ 数据持久层研究(一)

    C++ORM框架自动生成代码数据库  用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis ...

随机推荐

  1. Excel导入CSV文件中文乱码

    参考: iconv -f UTF8 -t GB18030 a.csv >b.csv 或iconv -f UTF-8 -t GB18030 a.csv >b.csv

  2. Mac os fatal error: 'numpy/arrayobject.h' file not found

    $ python setup.py install 出错信息如: clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g ...

  3. C++学习(十三)(C语言部分)之 练习

    打印图像 要用循环 空心或者实心都可以1.矩形 菱形 三角形 梯形 六边形2.打印倒三角形的99乘法表 具体测试代码如下: /* 1.打印图像 要用循环 空心或者实心都可以 矩形 菱形 三角形 梯形 ...

  4. exception in thread "http-apr-80-exec-24" java.lang.OutOfMemoryError:PermGen...

    今天客户说项目访问不了了,我急忙看了下告警,发现上报:“exception in thread "http-apr-80-exec-24" java.lang.OutOfMemor ...

  5. LG4980 【模板】Polya定理

    题意 题目描述 给定一个$n$个点,$n$条边的环,有$n$种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对$10^9+7$取模 注意本题的本质不同,定义为:只需要不能通过旋转与别的染色方 ...

  6. 日志信息log

    #include<syslog.h> //建立一个到系统日志的连接 //ident参数指向字符串,syslog()输出的每条信息都会包含这个字符串,这个参数的取值通常是程序名 //log_ ...

  7. Linux内核Inotify机制学习笔记

    一.Inotify简介: Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入.它是一个内核用于通知用户空间程序文件系统变化的机制.开源社区提出用户态需要内核提供一些机制,以便用 ...

  8. day 60 Bootstrip学习

    图标地址 http://fontawesome.io/icons/ 图标用法地址 http://fontawesome.io/examples/ 实现代码 <!DOCTYPE html> ...

  9. day 50 Java Script 学习

    前端基础之JavaScript   JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中) ...

  10. Write your own Terraform provider: Part 1

    转自:https://container-solutions.com/write-terraform-provider-part-1/ This is the first part of a seri ...