我读boost源代码笔记 第一篇 编译器版本确定

编译并使用Boost 1.57 boost库编译 1.首先在http://www.boost.org/下载源代码。 2.解压源代码到磁盘(如E:\project_VS\boost_1_57_0)。 3.生成bjam.exe可执行文件:       用VS2010的命令行来实现,后期也是使用VS20 阅读详情

不同的编译器对于template的支持不同的,boost对于不同的编译器是不同编译方法,因此开始特别强调本人使用的编译环境:本文使用的编译器版本为为VC 8.0, (主流了国人都是用visual studio的了,如果你用的不是visual studio本人写的读boost笔记对你就没有太大用了)

此外本笔记使用的是boost源代码的1.0版本,因为本人在阅读源代码的时候可能会对源代码进行改动,所以行号有所改动,但是相差不大了。在周围找找准能找到的

在阅读本文前,建议大家能够调配好boost,配置boost网络上一堆文章。我就不罗嗦了

言归正传,现在先来谈谈boost是怎么区分编译器的。 boost/config.hpp line:29

// if we don't have a compiler config set, try and find one:

#if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG)

#  include <boost/config/select_compiler_config.hpp>

#endif

也就是说我们找到了怎么设置编译器的头文件了,秘密就在 boost/config/select_compiler_config.hpp中在boost/config/select_compiler_config.hpp line:39 后我们可以看到有许多的#if defined等与编译头,就是对于不同的编译器进行选择了。

原来编译器默认会设置一些宏,我们可以根据这些宏来选择编译器,当然了亲爱vc一贯是受到鄙视的,我们在boost/config/select_compiler_config.hpp line:103,也就是最后一个重终于发现了亲爱的vc了

#elif defined _MSC_VER

//  Microsoft Visual C++

//

//  Must remain the last #elif since some other vendors (Metrowerks, for

//  example) also #define _MSC_VER

#   define BOOST_COMPILER_CONFIG "boost/config/compiler/visualc.hpp"

原来vc的编译器会设置的宏如下

_MSC_VER     vc的版本号 1400表示vc8 _MSC_FULL_VER  vc的具体版本号,这个似乎比上一个更加细

根据判断_MSC_VER可以判断我们使用的就是亲爱的vc了~~接下来我们就来到了boost/config/compiler/visualc.hpp文件中 boost/config/compiler/visualc.hpp 是对于vc各个版本的具体细分,可以看到

boost/config/compiler/visualc.hpp line: 78

boost/config/compiler/visualc.hpp line: 78

#if _MSC_VER <= 1400  // 1400 == VC++ 8.0

#  define BOOST_NO_MEMBER_TEMPLATE_FRIENDS

#endif



#if _MSC_VER <= 1500  // 1500 == VC++ 9.0

#  define BOOST_NO_TWO_PHASE_NAME_LOOKUP

#endif

我们亲爱的vc8仅仅不支持全部特性中的2个特性,算是很牛的了。呵呵关于不同的版本的vc分别支持什么特性我们通过阅读boost/config/compiler/visualc.hpp就可以得出了。呵呵

PCL与Boost Boost 是一个庞大、高质量、可移植、提供源代码的 C++ 库集合。它被誉为 “C++ 的准标准库”。许多 Boost 库的作者就是 C++ 标准委员会的成员,因此 Boost 中的大量设计和组件最终被采纳并融入到了 C++11 及后续的标准库中(如智能指针、线程、正则表达式、随机数库等)。 阅读详情

相关推荐

解决 Boost 版本导入目标不可用的警告提示

通过更新 Boost 版本,我们可以获得与当前使用的编译器或构建系统兼容的最新 Boost 版本。我们可以从 Boost 官方网站下载最新版本的 Boost,并按照官方文档中提供的说明进行安装和配置。如果更新 Boost 版本并不可行,我们可以尝试手动配置 Boost,以确保其与当前编译器或构建系统兼容。假设我们使用的 Boost 版本是 1.76.0,编译器是 GCC 10.3.0,并且在 CMake 中进行构建。完成后,我们可以通过将生成的库文件路径添加到项目的构建配置中,以正确链接 Boost 库。

GwtbPerl的博客 439

我读boost源代码笔记 第二篇 is_function代码的阅读

type_traits里面有着很多的文件,很难一一阅读完,这里说明is_function这个metafunction和他们所涉及到的一些其他的源文件,愿能起到抛砖引玉的作用吧。 首先来说的就是is_function,我们首先查阅到boost/type_traits/is_funcion.hpp line 64struct is_function_impl就是is_functio

1605

Boost.Jam构建系统 - v3.1.17版本

在现代C++开发中,Boost库凭借其强大的功能和高质量的代码成为了不可或缺的资源。Boost.Jam作为构建Boost库及其应用程序的核心工具,在版本v3.1.17中,为我们带来了若干关键特性和优化。本章节旨在简要介绍Boost.Jam的最新版本,并为读者提供一个概览,以便于深入理解和使用。bjam.exe的高级编译选项能够给予开发者更大的控制权,以满足特定的构建需求。一些高级选项如下::在构建过程中输出调试信息,有助于发现配置错误。:根据系统特性布局输出文件,提高效率。

weixin_35903223的博客 866

Boost源码简析系列——timer

Boost源码简析系列——timer(1)“Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。”摘自《C++ Boost 简介》。“一直流传这么一个

sixsavage的专栏 1938

深入理解Boost线程库:基于1.52版本的应用实例

本文还有配套的精品资源,点击获取 简介:Boost库是C++的一个扩展库,其中线程库是其核心部分,广泛用于多线程编程。本文通过罗剑锋先生的书本配例,基于Boost 1.52.0版本,详细探讨了在Visual Studio 2010环境下如何使用Boost线程库,并提供了实际应用示例。本文首先介绍了Boost线程库的基本用法,如线程的创建、启动、同步和结束,然后详细介绍了Bo...

weixin_42126677的博客 994

Boost 1.66.0库在VS2013下的x64/x86动态链接编译版本

Boost是一个跨平台的C++库集合,旨在提供通用编程问题的解决方案。自2000年首次发布以来,Boost库迅速成为C++开发社区的一个基石,提供了广泛的功能,包括字符串处理、容器、迭代器、算法、函数对象、模板元编程、并发编程工具等。

weixin_42389113的博客 414

boost::bind 源代码分析

boost::bind库绝对是最有用,最有价值的库之一,已被纳入tr1。bind库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数本文并不介绍bind的使用,而是从bind的源代码(boost1.38.0)中分析出它的实现原理bind执行大致可分为2个过程 1:构造函数对象 2:调用函数对象下面我们以以下代码为列,抽丝剥茧,分析bind的内部机制。#i

醉大饿极的专栏 7350

RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo

本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。

mac99的博客 1154

Boost C++ 库 | 是什么?

要增强C++项目的生产力,除了C++标准以外,Boost C++ 库是一个不错的选择。由于当前版本的C++标准在2003年修订之后,C++又有了新的发展,所以 Boost C++ 库提供了许多新的特性。由于有了 Boost C++ 库,我们无需等待下一个版本的C++标准,就可以立即享用C++演化中取得的最新进展。在面试中询问关于 Boost C++ 库的知识是不常见的,因为知道这些库的开发人员通常也清楚C++的最新创新,并且能够编写和理解现代的C++代码。的简单脚本,它也为不同的操作系统提供了源代码。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 1400

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

手持式激光测距仪全套方案

激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。方案预留了TTL串口、RS485接口,可通过串口助手看到测量数据,可自行DIY或者商业开发。无论是电路小白,还是技术大拿,都能通过方案资料成功做出一套激光测距仪。

Laser01的博客 2055

CMake 使用Boost 详解 -- Windows 版本

本文分析了Windows下CMake与Boost的版本兼容问题。CMake 3.30后重构了Boost设置,弃用FindBoost.cmake模块,推荐使用Boost自带的BoostConfig.cmake。测试环境为CMake 3.31.4、Boost 1.90和VS2022。详细介绍了Boost预编译库的目录结构、文件命名规则及版本匹配要点,指出库标记必须与项目编译配置完全匹配以避免链接错误。提供了Boost动态库和静态库的文件命名解析,帮助开发者正确选择适合项目配置的Boost库版本。

u012045365的博客 1158

论文翻译:Automatic Lesson Plan Generation via Large Language Models with Self-critique Prompting

在本文中,我们利用大型语言模型(LLMs)的理解和生成能力来自动生成定制化的课程计划。这解决了传统计划可能无法充分满足不同教学环境和学生群体的特定需求的常见挑战。我们提出了一个新颖的三阶段过程,包括使用检索增强生成(RAG)逐步生成课程计划的每个关键组成部分,通过LLMs进行自我批评,以及随后的细化。我们使用这种方法为小学2至5年级生成了涵盖80多个主题的数学课程计划。邀请了三位经验丰富的教育工作者制定全面的课程计划评估标准,然后使用这些标准将我们的LLM生成的课程计划与同一主题的实际课程计划进行基准比较。

CSPhD-winston的博客 1101

C++ Boost 之Python(生成一个扩展模块)

生成一个扩展模块Boost的Build过程,就想大家希望的那样,正在经历一些演化和改进.下面的一些事实可能会有帮助: 在Boost的子目录libs/python/build下有各种平台上的Make文件和一个Visual Studio工程. Build的目标包括: 扩展模块使用的boost_python静态连接库.在各种Unix平台上库的文件是libboost_python

Lythm的专栏 2780

PyCharm 配置 Anaconda 环境时找不到 python.exe 的解决办法

通过本文的排查步骤与详细解决方案,你应该能够迅速定位并修复 PyCharm 配置 Anaconda 环境时找不到 python.exe 的问题。确保正确设置环境路径、激活目标环境以及手动指定解释器路径是解决此问题的关键。随着开发工具与包管理器的不断更新,类似的问题可能会出现新的变体。持续关注官方文档、社区讨论和版本更新,可以帮助开发者及时适应新变化,并优化工作流程。希望本文提供的分析和代码示例能为你的开发环境配置带来帮助,让你在 PyCharm 与 Anaconda 的高效协同下,专注于创新与代码实现。

s13596191285的博客 3117

【网络与爬虫 53】Scrapy-Prometheus实战指南:打造企业级爬虫监控体系的终极解决方案

本文深入探讨Scrapy-Prometheus集成技术,通过费曼学习法从监控痛点出发,详细讲解如何在Scrapy爬虫中集成Prometheus指标收集系统。涵盖从基础配置到企业级监控体系的完整实战指南,帮助开发者构建可观测性强、可维护性高的分布式爬虫监控平台,实现爬虫性能的精准监控和智能告警。

熵数实验室 1584

Boost.Asio教程 0

Boost.Asio是一个用于网络和底层 I/O 编程事的跨平台 c + + 库,为开发人员提供一种一致的使用现代的 c + + 方法的异步模型。 概述 在 Boost.Asio,加上基本原理和设计信息中所包含的功能的概述。 使用 Boost.Asio 如何在您的应用程序中使用 Boost.Asio。包括在库依赖项和受支持的平台上的信息。 教程 介绍了使用 Boost.

xinqingwuji的博客 2274

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1653

我读boost源代码笔记 第三篇 关于has_xxx.hpp

这次要说的是has_xxx.hpp, 这一段小小的代码虽然很简短,但是写得很精彩,不容错过,请大家留意了。首先我们来谈谈has_xxx.hpp的作用, has_xxx就是用来判断某一个类中是否有xxx这个inner class,我们用has_type为例子说明问题(boost/mpl/aux_/has_type.hpp)struct A{ typedef int type

1674

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8817

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

如何在Ubuntu上安装Boost

I'm on Ubuntu, and I want to install Boost. 我在Ubuntu上,并且想安装Boost。 I tried with 我尝试过 sudo apt-get i

CHCH998的博客 1870

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

使用 LLVM clang C/C++ 编译器编译 boost 基础框架类库

另外一个方法比较麻烦需要去修改 project-config.jam 文件,可以参考这个项目是怎么实现自定义clang 编译器的位置编译NDK的。如果不是编译Android,那么相对简单点,想要高版本编译器,换系统在安装默认的编译器,或者自己调整当前使用编译器版本的软连接都是可行的办法。或者看看 Linux 下交叉编译 boost 的方法就晓得了,跟那种整法差不多,只是 clang 要麻烦的多,gcc 交叉相对容易点。1、下载 boost 1.84 库的源代码放到待编译目录。

liulilittle的博客 1258

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Visual Studio 2022 配置 Boost 库

本文详细介绍了在Visual Studio 2022中配置Boost库的三种方法。使用预编译版本可快速安装并在Visual Studio中配置包含和库目录;使用源码自行编译则提供了更多灵活性,详细讲解了编译Boost的步骤;通过NuGet安装则能自动处理依赖项。文章还提供了测试Boost的方法,并针对NuGet源缺失和LNK1104错误等常见问题提供了解决方案。

Darker的博客 4756

boost安装

boost安装boost安装 windows下安装 Step1 下载 Step2 编译源代码 Step3 VS中使用boostwindows下安装Step1 下载点击官网下载最新版的BOOST源码Step2 编译源代码 先把源代码放在D盘,eg: D:\boost_1_59_0 在源代码中找到批处理bootstrap.bat,运行之后,源代码中新增了1个文件bjam.exe Step3 VS中使用b

无机器不学习-加大码先森的分享 881

C++元编程和Boost编程库 (C++ Metaprogramming and Boost MPL )中部

Boost中的MPL库分析      MPL(Meta-Programming Library)是由David Abrahams和Aleksey Gurtovoy为方便模板元编程而开发的库,2003年被Boost吸纳为其中的一员,此后又历经一些大幅度修改,目前已经相当完善,其最新版本于2004年11月发布。MPL的出现是C++模板元编程发展中的一大创举,它提供了一个通用、高层次

hityct1的专栏 1万+

boost-1.53源代码编译

1、下载源代码。首先得明确,boost大多数库都仅仅有头文件。链接时不需Lib文件;下面库须要单独编译成库: Boost.Filesystem Boost.GraphParallel Boost.IOStreams Boost.MPI Boost.ProgramOptions Boost.Python Boost.Regex Boost.Serialization...

aoe41606的博客 125
上一篇: 指向临时变量的引用
下一篇: 我读boost源代码笔记 第二篇 is_function代码的阅读
binwind
博客等级 码龄23年 7粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值