Boost初探

初次研究Boost库,本文内容主要基于http://www.stlchina.org/twiki/bin/view.pl/Main/BoostEnterBoosthttp://www.boost.org/doc/libs/1_39_0/libs/filesystem/doc/index.htm
Boost中部分库需要首先编译为dll文件才能使用,而多数库来说是可以直接使用的(根据第一个链接,但是现在增加了很多库,都不知道这个“多数”还适用否),比如lexical_cast。以下使用lexical_cast的代码来自第一个链接:
#include <boost/lexical_cast.hpp>
#include <iostream>
#include <string>
int main()
{
using boost::lexical_cast;
int a = lexical_cast<int>("123");
double b = lexical_cast<double>("123.12");
std::string c = lexical_cast<std::string>(123.1234567);
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
std::cout<<c<<std::endl;
return 0;
}
使用VC命令行编译的时候注意将boost所在目录添加到包含选项中(/I)。运行结果如下:
123
123.12
123.12345670000001
注意第三行不是第一个链接作者所言的123.123,说明现在精度已经做了调整。
我主要关心的是filesystem库,所以实验了一下。本来网上又说这个库需要首先编译出dll的,但是我使用如下的代码直接编译:
#include <boost/filesystem.hpp>
#include <iostream>

namespace fs = boost::filesystem;

using namespace std;

int main(int argc, char* argv[])
{
fs::path p(argv[1], fs::native);
if (fs::exists(p))
{
cout<<fs::file_size(p)<<endl;
}
return 0;
}

 

结果是告诉我一个错误:无法打开文件“libboost_filesystem-vc80-mt-s-1_39.lib”。如果是偶那个VC2008,那 个地方就是vc90 。然后我使用libs文件夹下filesystem中的VS工程文件编译出了两个lib和对应的dll,但是链接到cl命令上还是这个问题。然后我在 IDE中编译simple_ls成功,我查看了它深沉的log文件,我发现它在cl命令上使用了如下几个定义:
/D "BOOST_ALL_NO_LIB" /D "BOOST_SYSTEM_DYN_LINK" /D "BOOST_FILESYSTEM_DYN_LINK"
于是我将其加到我的命令行下,编译成功,并且即使只有一个BOOST_ALL_NO_LIB也能够编译成功,但是如果没有它,这会得到如下的错误:
#error : "Mixing a dll boost library with a static runtime is a really bad idea..."
因此我觉得Boost库确实不方便使用,因为如果被调用者需要先生成dll的话,还需要知晓调用他们所应该定义的宏,当然貌似使用BOOST_ALL_NO_LIB也就行了。另外有一个BOOST_ALL_DYN_LINK,使用了的话与上边一样的错误。
但是boost确实强大,而且大。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值