boost::typeof库中使用宏BOOST_TYPE和BOOST_AUTO来模拟C++11关键字typeof和auto

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
/* boost_typeof.cpp
    boost中typeof库学习使用
*/

#include <iostream>
#include <vector>
#include <string>
#include <boost/typeof/typeof.hpp>
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
#define auto_t BOOST_AUTO

using namespace std;
using namespace boost;

//C++是一种静态强类型语言,所有变量在使用前都必须声明其类型
//但有时会带来麻烦,尤其是C++引入命名空间后,会导致繁琐的类型声明
//如 std::map<std::string, std::string>::iterator pos = ...;
//仅仅声明一个遍历map的迭代器,就使用了一大行
//使用using关键字打开命名空间后可以部分减少类型声明的长度,但是没有从根本是解决这样的问题
//随着编程技术的进步,将来的程序员也不可能写出冗长复杂的类型声明
//C++静态强类型的优点在这时已经成为阻碍程序员生产力的“缺陷”
//于是,C++11新增typeof和auto关键字解决上述问题

//头文件<boost/typeof/typeof.hpp> 定义的宏BOOST_TYPEOF  BOOST_AUTO
//完全模拟了C++11中typeof和auto的用法
//boost::typeof虽然支持C++和STL的大部分数据类型,但是它并没有智能到支持任何数据类型
//如果用户自定义类型想应用于type库,则需要宏注册后才能使用
vector<string> vecFunc()
{
    vector<string> vecString();
    return vecString;
}

namespace ex
{
    struct demo_class
    {
        int na;
        int nb;
    };
}
BOOST_TYPEOF_REGISTER_TYPE(ex::demo_class)          //向typeof注册类

int main(void)
{

BOOST_TYPEOF(;              //推导类型为double
);                           //推导类型为int
, "Michael Jordan")); //推导类型为pair<int, const char*>
    BOOST_AUTO(vec, vecFunc());                     //推导类型为vector<string>
    cout << typeid(x).name() << endl << endl;
    cout << typeid(y).name() << endl << endl;;
    cout << typeid(p).name() << endl << endl;;
    cout << typeid(vec).name() << endl << endl;;

BOOST_AUTO(xx, make_pair("Demo", ex::demo_class()));
    cout << typeid(xx).name() << endl << endl;;

auto_t(pd, ]);                     //推导类型为double*
    cout << typeid(pd).name() << endl << endl;;

cin.get();
    ;
}

boost实用工具:typeof库 BOOST_TYPE BOOST_AUTO的更多相关文章

  1. C++ 之Boost 实用工具类及简单使用

    本文将介绍几个 Boost 实用工具类,包括 tuple.static_assert.pool.random 和 program_options等等.需要对标准 STL 具备一定的了解才能充分理解本文 ...

  2. JavaScript和CSS实用工具、库与资源

    JavaScript和CSS实用工具.库与资源 JavaScript 库 Particles.js  - 一个用于在网页上创建漂亮的浮动粒子的 JS 库: Three.js  - 用于在网页上创建 3 ...

  3. boost实用工具:assign库了解学习

    许多时候,我们需要为容器初始化或者赋值,填入大量的数据; STL容器仅提供了容纳这些数据的方法,但是填充的步骤是相当地麻烦(insert.push_back); 于是,boost::assign出现了 ...

  4. 67 个JavaScript和CSS实用工具、库与资源

    在这篇文章中,我不会与大家谈论大型的前端框架,如 React.Angular.Vue 等,也没有涉及那些流行的代码编辑器,如 Atom.VS Code.Sublime,我只想与大家分享一个有助于提升开 ...

  5. boost实用工具:创建一个禁止复制的类 noncopyable

    boost的noncopyable允许创建一个禁止复制的类,使用很简单,但很好用!  C++ Code  12345678910111213141516171819202122232425262728 ...

  6. Lodash JavaScript 实用工具库

    地址:https://www.lodashjs.com/ Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.

  7. APICloud支持Atom编辑器,并建立开发工具核心库

    APICloud支持Atom编辑器开发工具 APICloud始终坚持多开发工具支持策略,开发者无论使用Sublime Text3.Eclipse还是Webstorm,都可以在APICloud平台中找到 ...

  8. IL反编译的实用工具

    初识Ildasm.exe——IL反编译的实用工具   Ildasm.exe 概要: 一.前言: 微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello Wor ...

  9. jQuery实用工具集

    插件描述:jQuery实用工具集,该插件封装了常用功能,如序列化表单值获取地址栏参数window对象操作等 此工具集包含判断浏览器,判断浏览终端,获取地址栏参数,获取随机数,数据校验等常用操作功能 引 ...

随机推荐

  1. laravel路由之分组路由

    laravel下的分组路由可以嵌套如下: Route::group(['prefix'=>'admin'],function(){ Route::group(['prefix'=>'dtk ...

  2. 我写的websocket推送例子,每隔5秒服务器向客户端浏览器发送消息(node.js和浏览器)

    node.js服务端 先要安装ws模块的支持 npm install ws 服务端(server.js) var gws; var WebSocketServer = require('ws').Se ...

  3. xdebug安装教程

    自动分析应该下载的文件: http://xdebug.org/wizard.php

  4. 简单实例,说明自动生成Makefile的详细过程

    为了编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤: 第一步:----------在/root/project/main目录下创建一个文件main.c,其内容如下:-- ...

  5. Atititjs javascript异常处理机制与java异常的转换.js exception process

    Atititjs javascript异常处理机制与java异常的转换.js exception process 1. javascript异常处理机制 Throw str Not throw err ...

  6. ruby gem tips(转)

    淘宝源: https://ruby.taobao.org 升级ruby gem gem update --system 查看gem版本 gem -v 查看gem版本,gems安装目录,remote s ...

  7. SecureCRT配置自动保存日志(实用)

    点“选项”---“全局选项”--“全局选项”--“默认会话”--“编辑默认设置”--“日志文件” 在“日志文件”中输入相应的参数就能达到这一效果. 比如你的日志文件放在的D:/SecureCRT/lo ...

  8. json中把非json格式的字符串转换成json对象再转换成json字符串

    JSON.toJson(str).toString()假如key和value都是整数的时候,先转换成jsonObject对象,再转换成json字符串

  9. [内核]procfs和sysfs

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/ 使用 sys 文件系统访问 Linux 内核 sysfs 的历史其与 proc 的 ...

  10. Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解<转>

    简介: handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri 部分(这里指uri templat ...