boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)

2024-03-17 05:48

本文主要是介绍boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

BOOST_PP_SEQ_SIZE还可以展示一下,BEGIN BOOST_PP_SEQ_FOLD_LEFT(SUB_S, 22, SEQ) == 10 END直接生产了2.6M的log过程惊恐

# define SEQ (4)(1)(5)(2)

 

开始处理代码:
BOOST_PP_SEQ_SIZE(SEQ)

//----------------------------------------

开始展开函数宏:
  @@@@ BOOST_PP_SEQ_SIZE(SEQ) @@ 

//----------------------------------------

对实参
SEQ
进行展开

//----------------------------------------

开始处理代码:
SEQ

//----------------------------------------

开始展开对象宏:
  @@@@ SEQ @@ 

//----------------------------------------

对象宏
SEQ
进行直接替换,结果为:
 (4)(1)(5)(2)

//----------------------------------------

开始处理代码:
 (4)(1)(5)(2)

//----------------------------------------

对代码
 (4)(1)(5)(2)

宏替换的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

对象宏
SEQ
展开的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

对代码
SEQ
宏替换的最终结果为:
 (4)(1)(5)(2)

//----------------------------------------

实参
SEQ
展开的最终结果:
(4)(1)(5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE(SEQ)
对宏体
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)

进行实参替换的结果为:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

开始处理代码:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)) @@ 

//----------------------------------------

对实参
BOOST_PP_SEQ_SIZE_
进行展开

//----------------------------------------

开始处理代码:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE_
宏替换的最终结果为:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

实参
BOOST_PP_SEQ_SIZE_
展开的最终结果:
BOOST_PP_SEQ_SIZE_

//----------------------------------------

对实参
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
进行展开

//----------------------------------------

开始处理代码:
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)

//----------------------------------------

开始展开函数宏:
  @@@@ BOOST_PP_SEQ_SIZE_0 (4) @@  (1)(5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_0(4)
对宏体
 BOOST_PP_SEQ_SIZE_1

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_1

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_1

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_SEQ_SIZE_1
(1) @@  (5)(2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_1(1)
对宏体
 BOOST_PP_SEQ_SIZE_2

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_2

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_2

//----------------------------------------

开始展开函数宏:
    @@@@ BOOST_PP_SEQ_SIZE_2
(5) @@  (2)

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_2(5)
对宏体
 BOOST_PP_SEQ_SIZE_3

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_3

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_3

//----------------------------------------

开始展开函数宏:
     @@@@ BOOST_PP_SEQ_SIZE_3
(2) @@ 

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE_3(2)
对宏体
 BOOST_PP_SEQ_SIZE_4

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_4

宏替换的最终结果为:
 BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
宏替换的最终结果为:
    BOOST_PP_SEQ_SIZE_4

//----------------------------------------

实参
BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2)
展开的最终结果:
BOOST_PP_SEQ_SIZE_4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))
对宏体
 BOOST_PP_CAT_I(a, b)

进行实参替换的结果为:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

开始处理代码:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

开始展开函数宏:
   @@@@ BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4) @@ 

//----------------------------------------

函数宏的调用
BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)
对宏体
 a ## b

进行实参替换的结果为:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始处理代码:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

开始展开对象宏:
   @@@@ BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4 @@ 

//----------------------------------------

对象宏
BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4
进行直接替换,结果为:
 4

//----------------------------------------

开始处理代码:
 4

//----------------------------------------

对代码
 4

宏替换的最终结果为:
 4

//----------------------------------------

对象宏
BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4
展开的最终结果为:
 4

//----------------------------------------

对代码
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

宏替换的最终结果为:
  4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)
展开的最终结果为:
 BOOST_PP_SEQ_SIZE_BOOST_PP_SEQ_SIZE_4

//----------------------------------------

对代码
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

宏替换的最终结果为:
   4

//----------------------------------------

函数宏的调用
BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))
展开的最终结果为:
 BOOST_PP_CAT_I(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_4)

//----------------------------------------

对代码
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

宏替换的最终结果为:
    4

//----------------------------------------

函数宏的调用
BOOST_PP_SEQ_SIZE(SEQ)
展开的最终结果为:
 BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 (4)(1)(5)(2))

//----------------------------------------

对代码
BOOST_PP_SEQ_SIZE(SEQ)

宏替换的最终结果为:
    4

这篇关于boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818007

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.