在家没事,看看boost的代码
2008-04-01 16:42
246 查看
其实也谈不上读代码,只不过前段时间用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
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决定了。这样,在编译的时候,就可以根据操作系统、编译器、选项的不同而确定应该链接到那个库了。
其实所谓追踪,有点像人工智能里面的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
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的代码
- 在家没事,看看boost的代码
- 在家没事,看看boost的代码
- 在家没事,看看boost的代码
- 在家没事,看看boost的代码
- 在家没事,看看boost的代码
- 看看玻璃代码,就知道你的车窗玻璃是谁造的
- 没事来看看~
- AdaBoost代码理解算法的原理
- 5个书写JavaScript代码的坏习惯,看看你中枪了没?
- boost 中的单元测试示例代码
- 不要光顾敲代码,有时间好好看看,不要被老板黑了。
- 看看我的代码怎么出问题了?有关listview,adapter,ContentObserver,DatabaseOpenHelper的。
- C++ boost::asio编程-异步TCP详解及实例代码
- 英语日常用语--给自己没事时候看看
- XGBOOST + LR 模型融合 python 代码
- 代码问题,大家来帮忙看看啊
- 没事的时候看看大神的博客(iOS界好的博客)
- Android常用检查判断方法(本人忘性大留个备份没事看看)
- Boost-python封装Cpp代码供Python调用