Boost开发指南-4.11config

config

config库主要是提供给Boost库开发者(而不是库用户)使用,它将程序的编译配置分解为三个正交的部分:平台、编译器和标准库,帮助他们解决特定平台特定编译器的兼容问题。

一般来说,config库不应该被库用户使用,不过在这个库里,我们也可以找到几个有用的小工具(其实在第1章我们就已经用到了config库里的BOOST_PLATFORM等宏)。

BOOST_STRINGIZE

宏BOOST_STRINGIZE可以将任意字面量转换为字符串。为了使用BOOST_STRINGIZE宏,需要包含头文件<boost/config/suffix.hpp>,即:

#include<boost/config/suffix.hpp>

BOOST_STRINGIZE是一个宏,这一点很重要,意味着它仅能用于编译期(准确地说是编译前预处理时),不支持运行时转换。如果要在运行时转换数字或者其他变量到字符串,则使用lexical_cast。

示范 BOOST_STRINGIZE用法的代码如下,其中的__LINE__是C标准中定义的内置宏,表示程序的行号,是一个long型整数:

cout << BOOST_STRINGIZE(__LINE__) << endl;
cout << std::boolalpha << (string("22") == BOOST_STRINGIZE(__LINE__)) << endl;

int x = 255;
cout << BOOST_STRINGIZE(x) << endl;

代码的前两条语句运用了BOOST_STRINGIZE,把编译期的整数转换成了字符串,而第三个 BOOST_STRINGIZE因无法处理运行时的整数变量,只能把它转换成字面意义的字符串。

BOOST_STRINGIZE最常见的用途是在泛型编程中将编译期常数转换成字符串,在调试或者输出日志时相当方便,如boost.exception中就用到了BOOST_STRINGIZE。

BOOST_STATIC_CONSTANT

C++标准允许直接在类声明中为静态整型成员变量赋初始值,但并不是所有编译器都实现了这个特性。如果使用的编译器缺乏这个能力,那么只能使用enum来变通实现。

下面的代码定义了一个类static_int,它同时使用了这两种方法:

struct static_int
{
     static const int v1 = 10; //静态整型变量赋初值
     enum { v2 = 20 }; //枚举得到编译期整数值
     int a[v2];
};

BOOST_STATIC_CONSTANT宏为这个解决问题提供了一个可移植的简便语法:

BOOST_STATIC_CONSTANT(type, assignment)

使用BOOST_STATIC_CONSTANT宏,我们无须担心编译器的能力限制,代码会更具可移植性。它的用法就像是一个普通的变量赋值语句,只是使用了略微有些变形的宏形式。

之前的例子可以用BOOST_STATIC_CONSTANT宏改写如下:

struct static_int
{
     BOOST_STATIC_CONSTANT(int, v1 = 10);
     BOOST_STATIC_CONSTANT(int, v2 = 20);
};

这样的代码比单纯的静态成员变量声明或者enum更清晰,具可读性。

代码示例

#include <iostream>
using namespace std;

#include <boost/core/ignore_unused.hpp>

#include <boost/version.hpp>
#if BOOST_VERSION <= 106400
#include <boost/config/suffix.hpp>
#else
#include <boost/config/detail/suffix.hpp>
#endif

using namespace boost;

//
void case1()
{
	cout << BOOST_STRINGIZE(__LINE__) << endl;
	cout << std::boolalpha << (string("22") == BOOST_STRINGIZE(__LINE__)) << endl;

	int x = 255;
	cout << BOOST_STRINGIZE(x) << endl;

	ignore_unused(x);
}

//

struct static_int
{
	BOOST_STATIC_CONSTANT(int, v1 = 10);
	BOOST_STATIC_CONSTANT(int, v2 = 20);
};

//

int main()
{
	case1();
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/95269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis常用数据类型及命令

Redis 常用数据类型 常用数据类型 主要是指value类型 key都是字符串类型的 各种数据类型对应的特点 应用场景 哈希&#xff1a;一般来存储一些对象 列表&#xff1a;存一些跟顺序有关系的数据&#xff0c;比如朋友圈点赞 集合&#xff1a;一般用来做运算&#xff0c;交集&a…

SQL注入之联合查询

文章目录 联合查询是什么&#xff1f;联合查询获取cms账号密码尝试登录 联合查询是什么&#xff1f; 适用数据库中的内容会回显到页面中来的情况。联合查询就是利用union select 语句&#xff0c;该语句会同时执行两条select 语句&#xff0c;实现跨库、跨表查询。 必要条件 两…

实验三十一、OCL 电路输出功率和效率的研究

一、题目 研究 OCL 功率放大电路的输出功率和效率。 二、仿真电路 OCL 功率放大电路如图1所示。 图 1 OCL 功率放大电路 图1\,\,\,\textrm{OCL}\,功率放大电路 图1OCL功率放大电路图中采用 NPN 型低频功率晶体管 2SC2001&#xff0c;其参数为&#xff1a; I C M 700 mA I_…

Java实现根据商品ID获取1688商品详情跨境属性数据,1688商品重量数据接口,1688API接口封装方法

要通过1688的API获取商品详情跨境属性数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者…

Vue的使用(2)

一个简单的Vue项目的创建 创建一个UserList.vue组件 在App.vue中使用该组件 使用组件的第一步&#xff0c;导入组件使用组件的第二部&#xff0c;申明这个组件使用组件的第三步&#xff1a;引用组件 结果&#xff1a; 事件和插值语法 <template> <div><!-- te…

08-pandas 入门-pandas的数据结构

要使用pandas&#xff0c;你首先就得熟悉它的两个主要数据结构&#xff1a;Series和DataFrame。虽然它们并不能解决所有问题&#xff0c;但它们为大多数应用提供了一种可靠的、易于使用的基础。 一、Series Series是一种类似于一维数组的对象&#xff0c;它由一组数据&#x…

专业制造一体化ERP系统,专注于制造工厂生产管理信息化,可定制-亿发

制造业是国民经济的支柱产业&#xff0c;对于经济发展和竞争力至关重要。在数字化和智能化趋势的推动下&#xff0c;制造业正处于升级的关键时期。而ERP系统&#xff0c;即企业资源计划系统&#xff0c;能够将企业的各个业务环节整合起来&#xff0c;实现资源的有效管理和信息的…

Web项目与帆软11集成后通过项目访问cpt文件会弹出数据决策系统登录界面如何取消

1、登录帆软 - 数据决策系统 * 点击 &#xff1a;管理系统 - 模板认证 - 点击设置按钮 - 关闭 2、选择关闭单个认证 你点击后&#xff0c;它默认所有都是开的。你依次点击关闭&#xff0c;然后再把要的模板点击开启&#xff0c;如下图所示&#xff1a;第一个就表示开了认证&am…

NB水表和LoRa水表有哪些不同之处?

NB水表和LoRa水表是两种目前市场上常见的智能水表&#xff0c;它们在功能、性能、应用场景等方面存在一些不同之处。 一、技术方面 NB水表采用NB-IoT技术&#xff0c;而LoRa水表采用LoRa技术。NB-IoT技术是窄带物联网技术&#xff0c;它具有良好的低功耗、低成本、高覆盖、高可…

vue 转盘抽奖功能,可控制抽奖概率

实现逻辑&#xff1a; 思路&#xff1a;首先需要一个转盘&#xff0c;然后需要一个抽奖按钮定位在中间&#xff0c;图片提前设计或者用背景颜色代替&#xff08;这里用的是图片&#xff0c;然后计算概率&#xff09;&#xff0c;使用css完成转动效果&#xff0c;每次转动完成之…

游戏中的图片打包流程,免费的png打包plist工具,一款把若干资源图片拼接为一张大图的免费工具

手机游戏开发中&#xff0c;为了提高图片渲染性能&#xff0c;经常需要将小图片合并成一张大图进行渲染。如果手工来做的话就非常耗时。TexturePacker就是一款非常不错方便的处理工具。TexturePacker虽然非常优秀&#xff0c;但不是免费的。 对于打包流程&#xff0c;做游戏的…

大数据项目实战(Sqoop安装)

一&#xff0c;搭建大数据集群环境 1.4 Sqoop安装 1.sqoop安装 &#xff08;1&#xff09;上传安装包 &#xff08;2&#xff09;解压安装包 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /export/servers &#xff08;3&#xff09;重命名 mv sqoop-1.4.6.b…

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码&#xff0c;总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索&#xff0c;终于找…

发光太阳聚光器的蒙特卡洛光线追踪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

JVM 内存大对象监控和优化实践

作者&#xff1a;vivo 互联网服务器团队 - Liu Zhen、Ye Wenhao 服务器内存问题是影响应用程序性能和稳定性的重要因素之一&#xff0c;需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践&#xff0c;其次在故障转移与…

【AI】数学基础——高数(积分部分)

高数&#xff08;函数&微分部分&#xff09; 文章目录 1.4 微积分1.4.1 基本思想1.4.2 定积分定义定义计算定积分定积分性质定理N-L公式泰勒公式麦克劳林公式 1.5 求极值1.5.1 无条件极值1.5.2 条件极值1.5.3 多条件极值1.5.4 凹函数与凸函数 1.4 微积分 用于求解速度、面积…

Windows Qt 5.12.10下载与安装

Qt 入门实战教程&#xff08;目录&#xff09; C自学精简实践教程 目录(必读) 1 Qt5.12.10下载 qt-opensource-windows-x86-5.12.10.exe 官方离线安装包 Download Source Package Offline Installers | Qt 下载巨慢&#xff08;也可能很快&#xff09; 只能下载到最新的&…

Nodejs快速搭建简单的HTTP服务器,并发布公网远程访问

前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff08;原为 Node.js Foundation&#xff0c;已与 JS Foundation 合并&#xff09;持有和维护&#xff0c;亦为 Linux 基金会的项目。Node.js 采用 Google 开发…

C# Emgu.CV 条码检测

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.Util; using static Emgu.C…

1960-2022年各国ESG(环境、社会、治理)数据-草案数据集

1960-2022年各国-ESG&#xff08;环境、社会、治理&#xff09;-草案数据集 1、时间&#xff1a;1960-2022年 2、范围&#xff1a;世界各国 3、来源&#xff1a;世界银行 4、说明&#xff1a;世界银行的ESG&#xff08;环境、社会、治理&#xff09;数据草案数据集涵盖了17…