Boost开发指南-4.11config

news2025/1/21 0:55:15

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Flink学习笔记》——第二章 Flink的安装和启动、以及应用开发和提交

​ 介绍Flink的安装、启动以及如何进行Flink程序的开发&#xff0c;如何运行部署Flink程序等 2.1 Flink的安装和启动 本地安装指的是单机模式 0、前期准备 java8或者java11&#xff08;官方推荐11&#xff09;下载Flink安装包 https://flink.apache.org/zh/downloads/hadoop&a…

循环购商业模式:挖掘用户价值,创新引领商业未来-微三云门门

亲爱的企业家们&#xff0c;我是微三云门门&#xff01;今天&#xff0c;我将为大家详细介绍一种颠覆性的商业模式&#xff1a;循环购商业模式。这个模式不仅可以帮助企业提升平台的复购率&#xff0c;还能够拉新用户并提升用户的消费率。让我们一起深入了解这个引人注目的商业…

MySQL8.Xx安装控制台未参数随机密码解决方案

MySQL8.xx一主两从复制安装与配置 MySQL8.XX随未生成随机密码解决方案 一: Mysql 安装时控制台未生成密码 安装过程中解压或者时安装时报错等,这种情况一般是因网络等其他原因导致下载的安装包不完整&#xff0c; 重新下载安装即可; 二: 安装解压都没问题,就是不生成随机密…

软件测试用例经典方法 | 单元测试法案例

单元测试又称模块测试&#xff0c;是对软件设计的最小单元的功能、性能、接口和设计约束等的正确性进行检验&#xff0c;检查程序在语法、格式和逻辑上的错误&#xff0c;并验证程序是否符合规范&#xff0c;以发现单元内部可能存在的各种缺陷。 单元测试的对象是软件设计的最…

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 内容简介 作者简介 使用Python做一个计算器 本期赠书 近年来国家大力支持半导体行业&#xff0…

前端组件库造轮子——Tree组件开发教程

前端组件库造轮子——Tree组件开发教程 前言 本系列旨在记录前端组件库开发经验&#xff0c;我们的组件库项目目前已在Github开源&#xff0c;下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验&#xff0c;开源分…

三雄极光家居秋季新品发布,争滔滔不绝!

​8月28日&#xff0c;三雄极光2023家居秋季新品发布暨订货会于中山古镇盛大启幕&#xff0c;会议以“聚力革新 影势领行”为主题&#xff0c;采用线上、线下相结合的方式举行。三雄极光总裁张宇涛、副总裁林岩、营销总经理陈勤显、家居事业部副总经理赵峰等领导出席了本次会议…

hdfs操作

hadoop fs [generic options] [-appendToFile … ] [-cat [-ignoreCrc] …] [-checksum …] [-chgrp [-R] GROUP PATH…] [-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…] [-chown [-R] [OWNER][:[GROUP]] PATH…] [-copyFromLocal [-f] [-p] [-l] [-d] … ] [-copyTo…

大学生开学必备清单|你有一份开学必备物品清单,请查收!

​又到了要开学的时候&#xff0c;面对开学季&#xff0c;很多同学还不知道需要准备哪些东西&#xff0c;为了让同学们能够准备充分大学生活&#xff0c;作为一个过来人&#xff0c;下面就来和你们唠一唠进入大学的时候&#xff0c;需要用到什么东西&#xff0c;以及有什么是开…

jumpserver堡垒机添加资产配置

目录 jumpserver堡垒机添加资产配置 1、创建jumpserver管理用户&#xff0c;登录jumpserver堡垒机 2、创建普通用户&#xff0c;管理资源服务器 3、创建特权用户&#xff0c;登录资源服务器 4、添加资源 5、资产授权 6、登录jumpserver&#xff0c;创建的jumpserver用户 7、…

【LeetCode】28 . 找出字符串中第一个匹配项的下标

28 . 找出字符串中第一个匹配项的下标&#xff08;简单&#xff09; 方法&#xff1a;双指针法 思路 使用 find 函数枚举原串 ss 中的每个字符作为「发起点」&#xff0c;每次从原串的「发起点」和匹配串的「首位」开始尝试匹配&#xff1a; 匹配成功&#xff1a;返回本次匹配…

撮合前端平台在低代码平台的落地实践 | 京东云技术团队

在京东技术的发展当下&#xff0c;不同的业务线&#xff0c;不同的区域&#xff0c;甚至于很多触达消费者的端&#xff0c;正在被中台架构能力所支撑。大家都很清楚&#xff0c;中台建设能够带来技术的规模化效应&#xff0c;具有提高业务协同、加速创新和交付速度、提高系统稳…

el-table动态生成多级表头的表格(js + ts)

展示形式&#xff1a; 详细代码&#xff1a; &#xff08;js&#xff09; <template><div><el-table :data"tableData" style"width: 100%"><el-table-column label"题目信息" align"center"><el-table-…

气传导耳机什么牌子好?盘点四款实用性不错的气传导耳机推荐

​对于追求健康和舒适的人来说&#xff0c;不入耳的气传导耳机更是一个理想的选择。气传导耳机采用不入耳设计&#xff0c;上耳效果更舒适&#xff0c;避免了对耳朵的压迫&#xff0c;还提供清晰、自然的音质。那么&#xff0c;面多市面上这么多气传导耳机&#xff0c;哪款比较…

2023年DAMA-CDGA/CDGP数据治理认证线上到这里学习

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

Docker 安装 portainer 管理神器

目录 1. 安装 Docker2. 安装 Portainer3. 创建容器4. 设置 Portainer 官网&#xff1a;https://www.portainer.io/ Portainer是一个开源的容器管理工具&#xff0c;它提供了一个直观的Web界面&#xff0c;用于管理和监控Docker容器。通过Portainer&#xff0c;您可以轻松地创建…

提前还贷计算器,可计算多次提前还款,何时还清贷款和一共要还多少利息,以及每月还款明细

这是一个提前还贷的计算器&#xff0c;特点是可以计算多次提前还款。 比如房贷120万&#xff0c;由于利息太高&#xff0c;想知道提前还款总共多久可以还清&#xff0c;一共要还多少利息。可以用这个计算器来计算。比如每年还10万&#xff0c;那么在第七次还款&#xff0c;202…

光接口和电模块

电接口 传输信号为&#xff1a;电信号&#xff0c;高电平代表1&#xff0c;低电平代表0 电口是服务器和网络中对RJ45等各种双绞线接口的统称&#xff0c;主要指铜缆&#xff0c;包括普通的网线和射频同轴电缆&#xff0c;是处理电信号的。由于这些端口都使用电作为信息的承载介…

找到字符串中所有字母异位词

力扣链接 官方题解 class Solution { public:vector<int> findAnagrams(string s, string p) {int sLen s.size(), pLen p.size();if (sLen < pLen) {return vector<int>();}vector<int> ans;vector<int> count(26);for (int i 0; i < pLen…

崭新商业理念:循环购模式的价值引领-微三云门门

尊敬的创业者们&#xff0c;我是微三云门门&#xff0c;今天我将为您详细探讨一种具有颠覆性的商业模式——循环购模式。这套私域流量裂变策略在实际应用中取得了巨大的成功&#xff0c;某些企业在短短6个月内迅速积累了400万用户&#xff01; 循环购商业模式的核心聚焦于三个…