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();
    ;
}

最新文章

  1. 【PRINCE2是什么】PRINCE2认证之七大原则
  2. c++ 虚函数
  3. 项目管理工具Redmine各功能测试
  4. 存储过程中执行动态Sql语句
  5. Hibernate配置问题
  6. sql 增加字段
  7. EMVTag系列10《发卡行公钥证书》
  8. struts2学习笔记(4)——数据类型转换
  9. 创建SDE表空间
  10. CTreeCtrl结点拖动实现(与后台联动)
  11. 服务器修改 ssh 22端口
  12. WCF学习——构建第二个WCF应用程序(五)
  13. MIPI协议-DSI
  14. C语言--第六周作业
  15. [APIO2010]
  16. Docker 学习3 Docker镜像管理基础
  17. GraphQL-前端开发的利剑与桥梁
  18. webpack学习笔记(五)
  19. js自动时间
  20. JTAG TAP Controller

热门文章

  1. 解决 android sdk 下载慢
  2. Android--全局变量 很好很强大
  3. Spring velocity 中文乱码 解决方案
  4. C++的引用与const指针的关系以及各种传递方式
  5. 如何让maven 将工程依赖的jar 复制到WEB-INF/lib 目录下
  6. 使用802.1X+FreeRadius+LDAP实现网络准入方案
  7. svn move (mv,rename,ren)
  8. Struts2 上传下载
  9. 如何利用dex2jar反编译APK
  10. Nginx - rewrite 不区分大小写进行匹配