在 boost::variant的原理及基本用法 ,我们知道想要获取variant 类型变量的内容,主要有apply_visitorget<T>两种方法,而get<T>的一个显著的缺陷即是,当variant类型变量以参数的形式传递给某一函数时,我们需要判断其可能的类型:

void times_two(boost::variant<int, std::string>& v)
{if (int& a = boost::get<int>(v))a *= 2;if (std::string& s = boost::get<std::string>(v))s += s;// 第二个 if 判断编译出错,// “表达式必须包含 bool 类型(或可转换为 bool)”
}

根据 语句乎?表达式乎?(Python/C) ,我们知赋值表达式具有右结合返回左值的特性,错误提示意味着string对象无法转换为bool

std::string s("hello");
if (s)// “表达式必须包含 bool 类型(或可转换为 bool)”

所以一种简单的改进即是:

std::string s("hello");
if (&s)
void times_two(boost::variant<int, std::string>& v)
{if (int& a = boost::get<int>(v))a *= 2;if (std::string* s = boost::get<std::string>(&v))*s += *s;
}

“表达式必须包含 bool 类型(或可转换为 bool)”相关推荐

  1. 【Debug】— C++ 表达式必须包含类类型

    错误一般发生在使用.进行访问时,原因可能在于: 你以为你定义了一个类对象,其实你是声明了一个函数,在编译器看来: 对类对象指针采用.的方式访问其成员变量: 也包括基本类型变量,错误地使用. int a ...

  2. ros中msg文件的bool类型并不会生成bool类型变量

    今天在调试的过程中,我用std::cout输出一个用msg文件定义的类型的成员变量,在msg中定义是bool类型,但是输出的时候发现不太对,输出不了正确的东西,查看了一下自动生成的源码,发现它把boo ...

  3. C++中为什么使用bool类型

    1.1. 为什么要用bool类型. 因为我曾经看到过C++程序员,使用着C++的编译器,却仍然在使用BOOL.TRUE.FALSE等宏来表达现实世界中的二值事物,令我很不解,前去询问才知是" ...

  4. C++中的bool类型

    学过C语言的程序员应该清楚,在C语言中,是没有bool这个基础类型的.在C语言中,当我们要表示真或假的时候,都是定义一个非bool类型来使用的. 在C++中,加入了布尔bool这种基础的类型,用tru ...

  5. C语言中有bool类型吗?

    之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...

  6. 【C#】加加和减减、复合赋值运算符、一元二元运算符、关系运算符、bool类型

    一.加加和减减 ①++   自身加一   有前加,后加 ② - -   自身减一   有前减,后减 注意:一元运算符++/--比二元的+-优先级高  //后加(先取原值参与运算,后自身加一) //后加 ...

  7. c语言中有bool变量吗,C语言中有bool类型吗?

    之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是bool类型没有定义.用了这么久的C和C ...

  8. C语言中定义bool类型

    C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的.bool类型有只有两个值:true =1 .false=0. 不过 C语言中可以自己定义咯 ...

  9. C语言 bool类型

    C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的.bool类型有只有两个值:true =1 .false=0. 为了兼容各种编译器,可以自己定 ...

  10. C语言中整型和bool的转换,bool和BOOL类型知识集合

    知识点一.C语言中有bool类型吗? 之前一直都没有注意到,最近在用C语言写DSP算法时,偶然间发现我函数中定义的bool类型的变量在VC6.0(我主要用它来检查一下语法错误)中编译居然报错了,说是b ...

最新文章

  1. APMServ下Xdebug安装与使用
  2. 第1章 ZLG7290B 简介
  3. RocketMQ高性能之底层存储设计
  4. 《C++语言基础》实践参考——友元类
  5. 创建office一直转圈_Windows写字板出现广告条幅:推荐用户使用在线版Office
  6. python桌面翻译_Python实现桌面翻译工具【新手必学】
  7. 信息学奥赛C++语言: 计算两个数的最大公约数
  8. python中、文件最重要的功能是( )和接收数据_170道面试题,python让你前尘毋庸
  9. Redis 学习---Redis 安装(2)
  10. 入侵微博服务器刷流量,开发者获刑 5 年;马化腾重回中国首富;支持 M1 芯片,VS Code 1.54 发布 | 极客头条...
  11. 基于CNN的人脸相似度检测
  12. U盘启动盘安装win10系统
  13. 小型计算器的实现——Java GUI图形界面设计案例
  14. 学习:对抗神经网络 - 恶意软件
  15. CRS-0215: Could not start resource 'ora.rac.rac2.inst'.
  16. 7. 丈母娘嫌我不懂K8s的Service概念,让我去面壁
  17. python 文字识别 tesseract_Python_文字识别引擎试用:tesseract-ocr
  18. Linux bridge agent状态xxx
  19. 成本低廉的深度学习与渲染显卡购买方案--英伟达矿卡P106
  20. 【UML】UML基本概念

热门文章

  1. HIVE 的笛卡尔积on无条件
  2. java中$和 的区别详解_MyBatis中#{}和${}的区别详解
  3. 专业制造计算机电缆,茶陵DJYP2VP2-22计算机电缆专业制造
  4. mysql in操作_MySQL查询in操作排序
  5. python适配器模式角色_适配器模式(Adapter模式)详解
  6. flamingo源码分析(1) :单例模式
  7. ECMAScript 6 + Babel
  8. 利用Apperance协议定义View的全局外观
  9. 百度地图API的第一次接触
  10. CodeForces Round #290 Div.2