BOOST_PP_SEQ_ENUM宏_freemannnn的博客-程序员秘密

技术标签: c++  boost源码剖析  boost    

定义此宏的头文件boost\preprocessor\seq\enum.hpp

此宏用来将一个序列转换成数组。

 

举个例子:

先定义一个序列,

#define BOOST_UNORDERED_PRIMES (17ul)(29ul)(37ul)(53ul)

(此序列可以在boost\unordered\detail\util.hpp中找到)

BOOST_PP_SEQ_ENUM(BOOST_UNORDERED_PRIMES)即为序列BOOST_UNORDERED_PRIMES转换后的数组17ul, 29ul, 37ul, 53ul

可以这样使用:

unsigned long data[] = {BOOST_PP_SEQ_ENUM(BOOST_UNORDERED_PRIMES};

 

它的宏定义如下:

#    define BOOST_PP_SEQ_ENUM(seq) BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE(seq)) seq

 

# define BOOST_PP_SEQ_ENUM_1(x) x

# define BOOST_PP_SEQ_ENUM_2(x) x, BOOST_PP_SEQ_ENUM_1

# define BOOST_PP_SEQ_ENUM_3(x) x, BOOST_PP_SEQ_ENUM_2

# define BOOST_PP_SEQ_ENUM_4(x) x, BOOST_PP_SEQ_ENUM_3

# define BOOST_PP_SEQ_ENUM_5(x) x, BOOST_PP_SEQ_ENUM_4

# define BOOST_PP_SEQ_ENUM_6(x) x, BOOST_PP_SEQ_ENUM_5

# define BOOST_PP_SEQ_ENUM_7(x) x, BOOST_PP_SEQ_ENUM_6

# define BOOST_PP_SEQ_ENUM_8(x) x, BOOST_PP_SEQ_ENUM_7

# define BOOST_PP_SEQ_ENUM_9(x) x, BOOST_PP_SEQ_ENUM_8

# define BOOST_PP_SEQ_ENUM_10(x) x, BOOST_PP_SEQ_ENUM_9

 

下面来围观这个宏是如何展开的,以及如何转换成相应的数组的。

--->BOOST_PP_SEQ_ENUM(BOOST_UNORDERED_PRIMES

--->BOOST_PP_SEQ_ENUM((17ul)(29ul)(37ul)(53ul))

--->BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, BOOST_PP_SEQ_SIZE((17ul)(29ul)(37ul)(53ul))) (17ul)(29ul)(37ul)(53ul)

--->BOOST_PP_CAT(BOOST_PP_SEQ_ENUM_, 4) (17ul)(29ul)(37ul)(53ul)

这一步有两个问题需要注意:

1.为什么BOOST_PP_CAT会先展开BOOST_PP_SEQ_SIZE((17ul)(29ul)(37ul)(53ul)),请参考BOOST_PP_SEQ_SIZE宏 http://blog.csdn.net/freemannnn/article/details/24524919

2.为什么BOOST_PP_SEQ_SIZE((17ul)(29ul)(37ul)(53ul))是4,请参考BOOST_PP_SEQ_SIZE宏  http://blog.csdn.net/freemannnn/article/details/24528959

--->BOOST_PP_SEQ_ENUM_4 (17ul)(29ul)(37ul)(53ul)

--->17ul, BOOST_PP_SEQ_ENUM_3(29ul)(37ul)(53ul)

--->17ul, 29ul, BOOST_PP_SEQ_ENUM_2(37ul)(53ul)

--->17ul, 29ul, 37ul, BOOST_PP_SEQ_ENUM_1(53ul)

--->17ul, 29ul, 37ul, 53ul

自此,宏展开结束。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/freemannnn/article/details/24531547

智能推荐

数值分析-雅可比迭代法,高斯-雅可比迭代法,超松弛迭代法。_暖风吹起云的博客-程序员秘密_雅可比迭代法实验分析

最近上数值分析实验课,将做实验用到的代码送给需要帮助的同学。前两种迭代方法基于计算机数值方法(第二版)(施吉林)212页例题雅可比迭代法:code: import java.util.Random;class Yabis{ public static void main(String[] args) { Random random=new Random(); ...

Oracle-SQL Explain Plan解读_小小工匠的博客-程序员秘密

概述执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。 基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划。常用方法1.Explain Plan For SQL•不要实际执行SQL语句,生成的计划未必是真实执行的计划 •必须要有plan_table 2.SQLPLUS A

angularjs表格的增删改查_healer1的博客-程序员秘密

综合练习 .addUser{ width: 100px;height: 40px;font-size: 18px;background-color: #11C1F3; } var app = angular.module("myApp",["ngRoute"]); //使用config配置路由规则 app.config(["$ro

String,StringBuffer与StringBuilder的区别以及String为什么是不可变的?_大大大猫头鹰的博客-程序员秘密

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经

使用nssm注册 windows服务_小码张的博客-程序员秘密

起因:今天上午安装了一个 ElasticSearch 数据库,启动方式是双击 elasticsearch.bat文件,这时会出现DOS窗口,但是当我们关闭窗口时,就不能进行访问数据库,当项目真正部署时这样是很不安全的,所以要找到一种方法来实现守护进程,将这个bat文件当做windows服务来运行,下面我们使用 nssm ,用nssm 来将bat转化为服务。1、先下载 nssm 软件:htt...

随便推点

Vue-4 路由_锋利的二丫的博客-程序员秘密

Vue-4 路由的配置和调用,命名路由和命名视图,嵌套路由,重定向和别名Vue-router的安装和基本配置路由是 Vue 通过操作切换或调用组件的另一种方式。常见应用场景就是后台管理系统中的选项卡操作。比如某个后台管理系统的侧边栏有商品管理、用户管理、订单管理选项,在点击左侧的菜单时,右侧内容部分展示对应的管理模块。要在 vue-cli 中使用 vue 的路由,要先在当前项目中安装 v...

计算机网络面试_Ak.imba的博客-程序员秘密

计算机网络一、计算机网络概述不同位置的多台计算机机器设备,通过通信线路连接起来,在操作系统以及通信协议的管理下,实现资源共享,和信息管理传递的计算机网络。组成包括,计算机、传输介质、网络操作系统以及相应的软件(前面两个软件后面两个硬件)1、网络设备1.1网卡每一网卡都有唯一的编号,这个号码叫做MAC地址,其功能主要有两个,一是将计算机的数据进行封装,通过通信线路发布到网上。二是接收网络上传来的数据,传到计算机中。1.2 交换机交换机与集线器一样,但性能却优于集线器。1000Mb/s的交换机的每

Java想转行大数据?我看可以,但这些你得提前准备好这些教程_weixin_45732643的博客-程序员秘密

前言相信很多Java开发者都对大数据有一定的了解,随着大数据时代的到来,也有很多Java程序员想要转行大数据。大数据技术中大多数平台使用的都是Java语言,因此,对于大数据技术的学习来说,Java程序员已经占尽了先机。但是很多人对大数据该怎么学,学哪些内容和方向不是很了解,下面就给大家来详细讲一下。大数据的就业前景据职业社交平台LinkedIn发布的《2017年中国互联网最热职位人才报...

sentinel源码分析第十一篇一核心流程一ParamFlowSlot流控_岁月人的博客-程序员秘密

文章目录一级目录二级目录三级目录一级目录二级目录三级目录

405 (Method Not Allowed)__海豚湾_的博客-程序员秘密

第一次遇到这个问题,百度之后的结果:解决方案:405请求方法不被允许。这时候应该检查请求方法是否正确,页面应该用GET请求还是POST请求。例如在请求微博access_token的时候虽然不需要发送数据但这个页面却要求使用POST请求。后来查看了下请求方法,的确是写错了。HTTP 405 错误 – 方法不被允许 (Method not allowed

Level Set需要掌握的知识:_lifeissmile的博客-程序员秘密

Level Set需要掌握的知识:学习和应用Level Set需要掌握偏微分方程理论及其数值化方法,其中又应该着重掌握偏微分方程中的Conversation Law,The Theory of Viscosity Solution and Hamilton-Jacobi

推荐文章

热门文章

相关标签