Windows下如何使用BOOST C++庫 .

Windows下如何使用BOOST C++

 

我採用的是VC8.0boost_1_35_0。本身從新編譯boost固然能夠,可是我使用了ios

http://www.boostpro.com/products/free多線程

 

提供的安裝工具 BoostPro 1.35.0 Installer (192K .exe) 。我強烈建議使用這個工具來在Windows下安裝BOOST庫和源文件。工具

 

1)使用boost_1_35_0_setup.exe這個工具下載boost庫,選擇你要的包(類型老是MutilthreadMutithread Debug),下載後自動安裝。我用VC8.0boost_1_35_0安裝在E:/boost。我主要介紹用RegExSignals2個須要編譯後才能使用的庫,spa

 

2)我在VC8.0下創建了一個Console工程,併爲工程添加了VC包含目錄:E:/boost/boost_1_35_0,和庫目錄:E:/boost/boost_1_35_0/lib。不須要指定連接哪一個庫,由於系統會自動查找的。線程

 

3)須要注意的是,我不使用動態連接庫,由於一堆的警告,讓我恐懼。所以我使用靜態的鏈接庫,就是名稱前有libboost-xxx樣式的庫。好比,要使用(注意與下面的名稱徹底一致):調試

Debug下:code

libboost_signals-vc80-mt-gd-1_35.libci

libboost_regex-vc80-mt-gd-1_35.libget

Release下:string

libboost_signals-vc80-mt-1_35.lib

libboost_regex-vc80-mt-1_35.lib

VC的項目屬性是:

       Debug:多線程調試 DLL (/MDd),不採用Unicode

Release:多線程 DLL (/MD),不採用Unicode

尤爲要注意,使用工具下載的時候,老是下載:

       Mutilthread  和  Mutithread Debug

這樣的好處是,咱們是連接到靜態的boost庫,因此,不須要任何boostdll。不要爲了貪圖小一點尺寸的運行時包而選擇使用boost的動態庫,起碼我看那一堆的警告就毛骨悚然。

 

下面就是個小例子,沒任何警告,一切如期:

 

///////////////////////////////////////////////////////////////////////////////

// main.cpp

//

// 使用BOOST C++標準庫

// 

//

// 2008-7-10 cheungmine

//

///////////////////////////////////////////////////////////////////////////////

#include <boost/lambda/lambda.hpp>

#include <boost/regex.hpp>

 

#include <iostream>

#include <cassert>

 

#include <boost/signals.hpp>

 

struct print_sum {

 void operator()(int x, int y) const { std::cout << x+y << std::endl; }

};

 

struct print_product {

 void operator()(int x, int y) const { std::cout << x*y << std::endl; }

};

 

 

//

// 主程序

//

int main(int argc, char** argv)

{

    boost::signal2<void, int, int, boost::last_value<void>, std::string> sig;

 

    sig.connect(print_sum());

    sig.connect(print_product());

 

    sig(3, 5);

 

    std::string line;    

    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );   

    while (std::cin)

    {        

        std::getline(std::cin, line);        

        boost::smatch matches;       

        if (boost::regex_match(line, matches, pat)) 

            std::cout << matches[2] << std::endl;    

    }

 

    return 0;

}

相關文章
相關標籤/搜索