代码改变世界

boost库的使用

2015-08-26 23:49  rangers  阅读(1630)  评论(0编辑  收藏  举报

使用boost静态库

boost静态库的使用方式很简单,在vs工程中设置好boost库头文件的目录以及库文件所在的目录。
使用时引入对应的头文件即可,boost的auto-link机制将会自动帮我们包含对应的静态lib。
一个比较有用的宏:

#define BOOST_LIB_DIAGNOSTIC

该宏让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。

测试代码:

#include "stdafx.h"
#define BOOST_LIB_DIAGNOSTIC

#include <string>
#include <iostream>
#include <cassert>
#include <boost/regex.hpp>

int _tmain(int argc, _TCHAR* argv[])
{
	boost::regex reg("\\d{2,3}");
	assert(boost::regex_match("234",reg) == true);
	return 0;	
}

编译信息如下:
boost_auto_link

从编译信息中可以明显看出程序链接了libboost_regex-vc100-mt-sgd-1_55.lib静态库。

使用boost动态库

如果想使用dll动态方式链接,需要预先定义宏:

#define BOOST_ALL_DYN_LINK

同样,此时boost也会默认帮我们包含对应的导入库lib。如果不想使用boost提供的auto-link机制,或者对它的自动链接不太放心的话(其实大可不必担心),可以预先定义宏:

#define BOOST_ALL_NO_LIB	

注:以上提到的宏必须在包含boost的头文件之前定义。vs工程的话,建议将宏定义在stdafx.h头文件中。

测试代码:

//stdafx.h文件
#include <stdio.h>
#include <tchar.h>
#define BOOST_ALL_DYN_LINK		//boost库 使用dll动态链接
#define BOOST_ALL_NO_LIB		//默认情况下boost的auto-link机制将会自动帮我们包含对应的静态lib 禁用auto-link机制
#define BOOST_LIB_DIAGNOSTIC	//VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序

#include "stdafx.h"
#include <string>
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

//引入导入库
//或者直接在工程属性中添加具体依赖的库名称
#ifdef _DEBUG
#pragma comment(lib,"boost_date_time-vc100-mt-gd-1_55.lib")
#else
#pragma comment(lib,"boost_date_time-vc100-mt-1_55.lib")
#endif

using std::endl;
using std::cout;
using std::string;
using namespace boost::gregorian;
using namespace boost::posix_time;

int _tmain(int argc, _TCHAR* argv[])
{
	date d1(2015,8,25);
	cout << to_iso_string(d1) << endl;
	cout << boost::gregorian::to_iso_extended_string(d1) << endl; 

	date current_day = day_clock::local_day();//得到当前日期
	cout << "current day: " << to_iso_extended_string(current_day) << endl;

	ptime p = second_clock::local_time(); //得到当前时间
	cout << boost::posix_time::to_iso_extended_string(p) << endl;
	return 0;
}

注:必须将相应的dll文件拷贝到可执行文件所在的目录中,否则程序无法执行。