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 ...
随机推荐
- PAT1034. Head of a Gang ——离散化+并查集
题意:成员A与成员B通话 ,成员B与成员C通话,则 ABC即为一个团伙,一共有若干个团伙,每个团伙的人数大于2且相互通话时间超过一定值即为黑帮,每个黑帮伙里有一个BOSS,boss是与各个成员打电话最 ...
- SharePoint2013集成Exchange之任务同步
SharePoint可以将任务列表到outlook中,但在sharepoint 2013 上这个功能似乎不是很好用,如下图所示,点击任务列表的"同步到Outlook"按钮: 在弹出 ...
- sphinx-1.3.0扩展在pPHP 7.0.7版本编译不通过
在这个网友也是在php7上面编译插件不通过 https://bugs.php.net/bug.php?id=71586 下php7对应的扩展文件即可 http://git.php.net/?p=pec ...
- C# 中的委托和事件(2)
委托.事件与Observer设计模式范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它 ...
- Condition分析
Condition中提供了一组类似于Object中的监视器方法.与Lock配合可以完成等待通知模式. Condition只能通过Lock#newCondition()方法获取,所以Condition是 ...
- kotlin学习二:初步认识kotlin
1. 函数 kotlin中支持顶级函数(文件内直接定义函数),对比JAVA来说,JAVA的程序入口是main方法,kotlin也一样,入口为main函数 首先看下kotlin中main函数的定义. f ...
- 大白话系列之C#委托与事件讲解大结局
声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 今天 ...
- Http协议是有状态的还是无状态的???
在查找session和cookie的区别的资料时,有资料提到http是无状态的.我是不会忘记的,企鹅面试官问过我“http协议是有状态的还是无状态的”,我说不知道(之前没听说过).后来想想那“404 ...
- 记-cloudstack 更改二级存储
一.问题是由于当初把二级存储挂载到了根分区的文件系统内,并随着慢慢的模板的增加,容量越来越小. 1.先在cloud 网页界面禁用cloudstack区域 2.然后停止cloudstack-manage ...
- java 等额本金与等额本息
等额本金与等额本息 等本等息的意思是,每月的本金相等,利息也相等. 等额本息的意思是,每月的本金+利息之和相等(其实每个月本金和利息都有变化,并不相等) 等本等息的意思是,每月的本金相等,利息不等. ...