BOOST_TYPEOF和BOOST_AUTO
1.简介
头文件<boost/typeof.hpp>里定义了两个宏:BOOST_TYPEOF和BOOST_AUTO,分别用于仿真C++新标准的typeof和auto关键字,可以在编译期自动推导表达式的类型。它们不仅能够推导C++语言内建的int、double、数组、函数指针等等类型,也支持标准库中的容器类型,使程序员再也不需要写复杂的类型定义就能够轻松声明变量。
2.宏的声明
这两个宏完全模仿了typeof和auto关键字的用法,除了因为宏的语法限制而不得不使用逗号分隔参数,宏的简要声明如下:
#define BOOST_TYPEOF(Expr)\
boost::type_of::decode_begin<BOOST_TYPEOF_ENCODED_VECTOR(Expr) >::type
#define BOOST_AUTO(Var, Expr) BOOST_TYPEOF(Expr) Var = Expr
BOOST_TYPEOF使用一个表达式作为宏的参数,它可以如typeof那样推导出表达式Expr的类型。BOOST_AUTO的功能则与auto类似,使用BOOST_TYPEOF推导表达式Expr类型,然后用这个类型声明变量Var,并将表达式的结果赋值给Var。由于BOOST_AUTO实际上调用了BOOST_TYPEOF,因此它不仅能够声明普通变量,也能够在变量名前加上&或者*修饰,声明引用或者指针变量。
3.例子
示范BOOST_TYPEOF和BOOST_AUTO用法的代码如下:
#include <boost/typeof/typeof.hpp>
vector<string> func() //一个返回vector<string>的函数
{
vector<string> v();
return v;
}
int main()
{
BOOST_TYPEOF(2.0*) x = 2.0 * ; //推导类型为double
BOOST_AUTO(y, +); //推导类型为int
BOOST_AUTO(&a, new double[]); //推导类型为double*的引用
BOOST_AUTO(p, make_pair(, "string")); //推导类型为pair<int,const char*>
BOOST_AUTO(v, func()); //推导类型为vector<string>
}
BOOST_TYPEOF和BOOST_AUTO的更多相关文章
- boost在自己主动确定数据类型(BOOST_TYPEOF和BOOST_AUTO)使用
#include<boost/typeof/typeof.hpp> #include<vector> #include<iostream> #include BOO ...
- boost学习目录
Boost之数值转换lexical_cast https://www.cnblogs.com/TianFang/archive/2013/02/05/2892506.html Boost之字符串算法s ...
- boost实用工具:typeof库 BOOST_TYPE BOOST_AUTO
boost::typeof库中使用宏BOOST_TYPE和BOOST_AUTO来模拟C++11关键字typeof和auto C++ Code 123456789101112131415161718 ...
- BOOST_AUTO宏
在boost中,有个非常不错的宏BOOST_AUTO(),它的作用是自动给var定义类型,适合function()函数返回的值的类型. int function() { ; } main() { BO ...
- [转] boost------ref的使用(Boost程序库完全开发指南)读书笔记
http://blog.csdn.net/zengraoli/article/details/9663057 STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值 ...
- boost------ref的使用(Boost程序库完全开发指南)读书笔记
STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在内部保修函数对象的拷贝并使用,例如: #include "stdafx.h&quo ...
- boost--BOOST_AUTO、typeof、result_of
1.BOOST_AUTO BOOST_AUTO的功能类似于auto和any,可以用来定义任意类型数据,且可以在编译时自动推导出表达式的类型.BOOST_AUTO属于boost中的typeof库,使用需 ...
- BOOST学习笔记
BOOST学习笔记 1 tool #pragma once #include <vector> #include "boost/noncopyable.hpp" #in ...
- unordered容器
1.散列容器(hash container) 散列容器通常比二叉树的存储方式可以提供更高的访问效率. #include <boost/unordered_set.hpp> #includ ...
随机推荐
- NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构
本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...
- AT 指令和常见错误码
一. 一般命令 1. AT+CGMI 给出模块厂商的标识. 2. AT+CGMM 获得模块标识.这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900).当模块有多频带时,回 ...
- redis 命令集
进入客户端 /usr/local/bin/redis-cli 选择数据库 select index (0-15) 退出 quit
- JS 实现关闭浏览器
$('#exitSystem').on('click',function(){ if(confirm("确定要退出系统并关闭浏览器吗?")){ //关闭浏览器的方法只适用i ...
- Python基础之元组tuple(带了枷锁的列表)
元组不能直接插入删除修改元素. 逗号是关键 创建空元组 元组的一些操作符 别忘了逗号,"*"重复操作符也可以使用 元组通过切片间接更新 插入元素,可以使用拼接操作符(“+”) &g ...
- iRedMail的搭建过程记录
iRedMail的搭建和注意事项 经过一段时间的折腾,终于将iRedMail搭建起来了,下面介绍一下搭建的过程,以及注意事项. 注意事项: 1. iRedMail不支持重复安装,如果安装错误,请重置 ...
- 5月3日上课笔记-properties文件,junit测试,mvc封层等
StringBuffer 线程安全,效率低 StringBuilder 线程不安全,效率高 判断数组是null还是空数组 null 空数组 int[] array=null; int[] array2 ...
- 【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
题目 传送门:QWQ 分析 人类智慧题,不会做...... 详细题解1 详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短 ...
- svn ignore 的用法(忽略文件及目录)
svn ignore 的用法(忽略文件及目录) 若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容: $ svn mkdir spool $ svn propset svn:i ...
- sublime text 怎么浏览包
点击到设置里 里面有个包浏览.