`
feipigwang
  • 浏览: 792420 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在家没事,看看boost的代码

阅读更多
其实也谈不上读代码,只不过前段时间用boost的date_time库用得很频繁,发现它总是可以自行提示需要link到哪些库,一直觉得不解。今天没事,干脆追踪一下,看看到底是怎么实现的。

其实所谓追踪,有点像人工智能里面的width-first search:date_time库默认引用的是一个头文件
#include "boost/date_time/gregorian/gregorian.hpp"

这个文件,当然,只不过是在引用其它的文件
#include "boost/date_time/gregorian/gregorian_types.hpp"
#include "boost/date_time/gregorian/formatters.hpp"
#include "boost/date_time/gregorian/greg_facet.hpp"
#include "boost/date_time/gregorian/parsers.hpp"

没有关系,继续追,不过这次不是盲目的,先看看他们都include了什么,gregorian_types.hpp似乎没有引用什么有趣的东西;formatters.hpp也没有;greg_facet.hpp还是没有;但是parsers.hpp里面是这样的
#include "boost/date_time/gregorian/gregorian_types.hpp"
#include "boost/date_time/date_parsing.hpp"
#include "boost/date_time/compiler_config.hpp"
#include "boost/date_time/parse_format_base.hpp"

其中compiler_config.hpp看起来很像是有点意思的,可以继续看看。
文件很短,前面的bla, bla, bla ... 看到这一句
#define BOOST_LIB_NAME boost_date_time

哈哈,这不就是date_time的库文件名字的一部分么?且看看谁用了这个东西,果然没过几行,有
//
// And include the header that does the work:
//
#include <boost/config/auto_link.hpp>

auto_link! that's what we want! 打开一看,豁然开朗。这个文件利用preprocessor确定操作系统,编译器,链接选项(dynamic vs static, debug vs release...),然后把这些拼接起来,最终送到这一句

# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib")

大写的当然都是macro,它们的值在前面由preprocessor决定了。这样,在编译的时候,就可以根据操作系统、编译器、选项的不同而确定应该链接到那个库了。
分享到:
评论

相关推荐

    boost 1.65.1 源代码

    boost 1.65.1 源代码 自己备用 boost 1.65.1 源代码 boost 1.65.1 源代码 boost 1.65.1 源代码 boost 1.65.1 源代码

    VC代码 boost_1_29_0 (实用代码源)

    VC代码 boost_1_29_0 (实用代码源)VC代码 boost_1_29_0 (实用代码源)VC代码 boost_1_29_0 (实用代码源)VC代码 boost_1_29_0 (实用代码源)VC代码 boost_1_29_0 (实用代码源)VC代码 boost_1_29_0 (实用代码源)VC代码 ...

    VC代码 boost-1_20_2 (实用代码源)

    VC代码 boost-1_20_2 (实用代码源)VC代码 boost-1_20_2 (实用代码源)VC代码 boost-1_20_2 (实用代码源)VC代码 boost-1_20_2 (实用代码源)VC代码 boost-1_20_2 (实用代码源)VC代码 boost-1_20_2 (实用代码源)VC代码 ...

    VC代码 boost_1_33_1.tar (实用代码源)

    VC代码 boost_1_33_1.tar (实用代码源)VC代码 boost_1_33_1.tar (实用代码源)VC代码 boost_1_33_1.tar (实用代码源)VC代码 boost_1_33_1.tar (实用代码源)VC代码 boost_1_33_1.tar (实用代码源)VC代码 boost_1_33_1....

    VC代码 boost_1_34_0_setup (实用代码源)

    VC代码 boost_1_34_0_setup (实用代码源)VC代码 boost_1_34_0_setup (实用代码源)VC代码 boost_1_34_0_setup (实用代码源)VC代码 boost_1_34_0_setup (实用代码源)VC代码 boost_1_34_0_setup (实用代码源)VC代码 ...

    VC代码 boost_1_33_1_setup (实用代码源)

    VC代码 boost_1_33_1_setup (实用代码源)VC代码 boost_1_33_1_setup (实用代码源)VC代码 boost_1_33_1_setup (实用代码源)VC代码 boost_1_33_1_setup (实用代码源)VC代码 boost_1_33_1_setup (实用代码源)VC代码 ...

    VC代码 boost_1_33_1.tar.tar (实用代码源)

    VC代码 boost_1_33_1.tar.tar (实用代码源)VC代码 boost_1_33_1.tar.tar (实用代码源)VC代码 boost_1_33_1.tar.tar (实用代码源)VC代码 boost_1_33_1.tar.tar (实用代码源)VC代码 boost_1_33_1.tar.tar (实用代码源)...

    buckboost.rar_PWM Boost _boost PID_boost电路闭环_boost闭环_buckboost 闭

    文件名“buckboost.c”暗示了这是整个项目的主要源代码文件,其中包含了实现PWM控制和PID算法的函数和逻辑。通过阅读和分析这段代码,我们可以深入理解如何在实际应用中结合这些技术来优化Boost转换器的性能。 总结...

    boost源代码--

    Boost库被广泛应用于工业级软件开发,因其高质量、经过充分测试的代码而备受赞誉,也是C++标准库的重要贡献者。在深入探讨Boost库之前,我们首先需要了解C++的基础知识,包括类、模板、STL(Standard Template ...

    Boost Asio 示例代码

    通过这些代码,学习者可以更好地理解如何实际应用Boost.Asio。 10. **安装和配置**: 如描述中提到, Boost库需要安装,并且可以通过设置头文件和库文件路径来配置编译环境。对于Windows用户,通常将Boost安装在...

    boost 线程池源代码文档

    通过深入学习和理解Boost线程池的源代码,开发者可以更好地利用多核处理器资源,优化并发程序的性能,同时保持代码的简洁性和可维护性。对于需要处理大量并发请求的服务或应用程序,Boost线程池是一个值得考虑的解决...

    Boost ASIO C++ 网络编程 中文版 带全书所有例子代码

    **Boost ASIO C++ 网络编程 中文版 带全书所有例子代码** Boost ASIO 是一个用于编写异步网络应用程序的库,它为C++开发者提供了强大而灵活的工具。这本书《Boost.Asio C++ Network Programming》中文版,结合了...

    boost 库的源代码

    Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响...

    基于STM32的Boost电路(最简单的Boost电路)代码

    在设计基于STM32的Boost电路时,通常需要编写控制代码,以便微控制器可以实时监测电路状态并相应地调节开关元件的工作。这通常涉及到模拟信号的采集(如电压和电流检测),PWM信号的生成来控制MOSFET的开关频率和...

    boost_1_42 版本源代码

    同时,阅读和理解Boost库的源代码可以帮助你深入理解C++的设计模式和最佳实践。如果你遇到任何问题,可以参考提供的文档,或者参与开源社区的讨论,以获取帮助和支持。总之,Boost库是一个强大的工具集,能够极大地...

    boost 线程池源代码

    Boost线程池是Boost库中的一个组件,它提供了一种高效、灵活的多线程管理机制,用于在并发环境中调度任务。线程池的核心思想是维护一组后台工作线程,当有新任务需要执行时,而不是每次都创建新的线程,而是从线程池...

    智能指针boost精简源代码

    在这个“智能指针boost精简源代码”压缩包中,我们有两个主要的文件:`shared_ptr`和`shared_ptr_h`,它们分别对应于Boost库中的`boost::shared_ptr`智能指针的源代码。 `boost::shared_ptr`是一种引用计数型智能...

    boost测试代码

    在这个"boost测试代码"的压缩包中,我们可以看到一些关键组件的测试用例,包括线程池、内存池和定时器,这些都是在高性能或资源敏感的应用程序中经常使用的工具。 1. **线程池(Threadpool)**:线程池是一种多线程...

    PSO-Catboost粒子群算法优化Catboost分类预测,优化前后对比(Matlab完整源码和数据)

    3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 5.作者介绍:机器学习之心,博客专家认证,机器...

    《深入实践Boost:Boost程序库开发的94个秘笈》(原书英文版)及书中源代码

    这本书与罗剑锋写的boost姊妹篇可以对照去看,罗所介绍的是每个类库的功能及应用,像字典一样的书籍;而该书更像“问答式”的书籍,他们侧重角度不同。 本资源包括两部分:1)该书的英文版pdf,带有目录,可做任何...

Global site tag (gtag.js) - Google Analytics