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 ...
随机推荐
- PPP PDP 及GPRS
1.相关概念: PDP:Packet Data Protocol 分组数据协议 PLMN:Public Land Mobile Network,公共陆地移动网络 APN:Access Point Na ...
- 0基础自学php教程
轻松搞定网页设计之html 一.HTML介绍 1. HTML概念 HTML(Hyper Text Markup Language),即超文本标记语言.是目前网络上应用最为广泛的语言,是构成网页文档的主 ...
- C# 操作iis6、iis7 301
iis6版本方法... iis7以及以上版本方法 using (ServerManager serverManager = new ServerManager()) { ...
- 电脑桌面文件图标经常显示异常&&右键桌面文件属性不显示
桌面图标经常失效,但文件可以正常点开使用. 右键桌面文件的属性,电脑无反应. 解决方法 ① cmd-sfc/scannow 此方法无效 ② 点击上图的运行疑难解答,最终找到问题,重启后解决! PS 型 ...
- [Java][Web]Response学习
// 在 http 中,meta 标签可以模拟响应头 response.setHeader("Content-type", "text/html;charset=UTF- ...
- windows下mysql定时备份
场景:一套B/S小系统,租用了一个虚拟服务器windows 2003,数据库是mysql,做每天的数据库备份 1.关于windows下的定时任务执行 * 命令说明 - /sc 指定计划类型,取 ...
- iframe显示跨域url页面
可以通过JS搞定跨域问题,但是比较麻烦,我就在后台处理了,其实这样本质上也算不上是跨域了 后台otherwebsite.php: <?php $url="www.otherwebsit ...
- http的含义
HTTP是超文本传输协议,是客户端浏览器或其他程序与Web服务器之间的应用层通信协议.在Internet上的Web服务器上存放的都是 超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息.H ...
- ALSA声卡12_从零编写之添加音量控制_学习笔记
1.设置音量时应用程序的调用过程 (1)strace分析: amixer cset numid=1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_IOCTL_ ...
- node中的favicon.icon请求
var http=require("http"); var server=http.createServer(); server.on("request", c ...