最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中Boost庫裁剪與其應(yīng)用詳解

 更新時間:2016年10月27日 10:01:38   投稿:daisy  
大家都知道STL全稱"標準模板庫(Standard Template Library)",其實它是一套標準,可能有不同的實現(xiàn),它是 C++ 的"標準庫"。Boost 則是一個 C++ 庫,被稱為"C++ 準標準庫"。那么這篇文章文章我們就來詳細的介紹C++Boost庫的裁剪與其應(yīng)用,感興趣的朋友可以一起學(xué)習(xí)。

前言

Boost 庫涵蓋的范圍極廣,有字符串和文本處理相關(guān)子庫比如 format 庫和 regexp 庫,有容器相關(guān)子庫比如 variant 庫(和 Qt 的 QVariant 有得一拼),有迭代器子庫比如 tokenizer 庫(可以把字符進行 tokenize),還有算法、函數(shù)對象和高階編程相關(guān)子庫如functional 庫、lambda 庫和 signal 庫,還有泛型編程、模板編程子庫如 call traits、mpl,還有并發(fā)編程相關(guān)的 thread 庫,等等等等。

Boost 是如此強大,毫無疑問它也很大。Windows 上安裝 boost 需要占用 2G+ 的空間,編譯配置起來也十分麻煩。

本文討論的是如何不配置 boost 庫而使用 boost 庫。

解決方案用一句話說就是:

裁剪 boost 庫,并在項目中內(nèi)嵌 boost 源碼,使項目脫離對 boost 庫的依賴。

通過一個例子說明 boost 庫裁剪的意義

或許你還是不明白 boost 庫裁剪到底是啥意思,那我們一起來跑一個例子。以我的 cmake-templates 里面的一個 boost 代碼為例,源碼只有一個 main.cpp,里面只有如下幾行:

#include <cstdio>
#include <boost/date_time/posix_time/posix_time_types.hpp>

int main( void )
{
 namespace pt = boost::posix_time;
 pt::ptime now = pt::second_clock::local_time();

 printf( "%s\t->\t%04d-%02d-%02d %02d:%02d:%02d\n"
   , "date '+%Y-%m-%d %H:%M:%S'"
   , (int)now.date().year()
   , (int)now.date().month()
   , (int)now.date().day()
   , (int)now.time_of_day().hours()
   , (int)now.time_of_day().minutes()
   , (int)now.time_of_day().seconds() );

 return 0;
}

程序運行輸出大概是:

date '+%Y-%m-%d %H:%M:%S' -> 2016-07-11 19:33:19

這 20 行不到的代碼,展示了 Linux 系統(tǒng)下一個常用指令 date 輸出當前時間的效果(相當于命令行下輸入 date '+%Y-%m-%d %H:%M:%S')。

如果你的系統(tǒng)配置了 Boost,那就到上面的鏈接下載源碼,進入 boost 文件夾,這里一共有三個文件:一個 main.cpp、一個 CMakeLists.txt,一個 README 說明文檔。

但要運行這個程序并不容易,尤其是在一切都要手工的 Windows 系統(tǒng)上:你必須自己去下載合適的 boost 版本,設(shè)定一些環(huán)境變量。

在 Linux 下則比較簡單,只要三步(先下載源碼,并 cd 到源碼目錄):

sudo apt-get install -y libboost-all-dev cmake
mkdir build && cd build
cmake .. && make && ./BOOST

你不禁感慨,為了運行一個 20 行不到的小程序,居然要手工安裝兩三個 G 的 boost 庫!

這時候 boost 庫的裁剪,就顯得尤為重要了。我們不希望拿到代碼的人還要費時間去配置 boost 庫,我們也不希望自己的代碼要十分小心地,才能跑起來。我們要讓自己的代碼不論什么情況都能迅速地跑起來!

我們裁剪后的 boost 庫,頭文件大概有 3.18 MB,cpp 文件有兩個約 11 KB。看上去挺大,但是壓縮完其實就 213 KB!拿到這份代碼,首先解壓 include.zip 到當前文件夾,然后運行 cmake 生成 VS 工程(或者 Linux 上的 makefile 工程),然后編譯、運行。完全不需要再管那煩心的 boost 庫的配置了!

我想你一定能把這個程序跑起來的。無論你用什么操作系統(tǒng),用什么編譯器。

運行起來更省心,這就是 boost 庫裁剪的意義。

我要怎么裁剪出自己需要的部分?

我們來深究一下怎么拿到上面那 3.18 MB 的頭文件,11 KB 的 cpp 文件。

首先,下載 Boost 庫源碼,你可以去 官網(wǎng)。我們只需要官方 release 的源碼里的 boost 和 libs 文件夾下的東西,所以我建議你下載我的備份。因為它真的小很多,下載起來也很快。而且里面還打包了用于提取 boost 源碼的工具 bcp1。

然后,解壓下載到的壓縮包,進入源碼文件夾,新建一個文件夾,比如叫 output,然后在當前窗口打開命令行,輸入 ./bcp.exe boost/date_time/posix_time/posix_time_types.hpp output,這里 "./bcp.exe" 是我們的裁剪工具,"boost/date_time/posix_time/posix_time_types.hpp" 是我們自己項目中用到的 boost 頭文件,如果有多個頭文件,用空格隔開,把它們都敲進命令行。2最后的 "output" 是輸出文件夾。

在 cmake 里,這個過程大概是

1)在源碼根目錄新建 include 文件夾,在根目錄的 CMakeLists.txt 加上 include_directories( ${CMAKE_SOURCE_DIR} );

2)新建 libs 文件夾,把裁剪出來的 cpp 文件放到這個文件下的 MiniBoost 文件加下,然后參考 district10/bcp-example-1/libs 寫好 CMakeLists 文件,再到根目錄的 CMakeLists 文件加上 add_subdirectory( libs);3)將裁剪出來的 miniboost 鏈接到我們的二進制:target_link_libraries( ${PROJECT_NAME} MiniBoost ) 。

你可以仔細對比看看鏈接系統(tǒng)安裝的 Boost 庫和使用自帶的裁剪后的 Boost 庫(我把它稱為 MiniBoost)兩者的區(qū)別和聯(lián)系

注意:一個需要注意的地方是,提取出來的頭文件里,boost/config/auto_link.hpp 里的內(nèi)容最好刪掉,不然在 Windows 平臺上,boost 會嘗試自動鏈接。所以我通常把這個文件內(nèi)容清空。

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • C語言編程中實現(xiàn)二分查找的簡單入門實例

    C語言編程中實現(xiàn)二分查找的簡單入門實例

    這篇文章主要介紹了C語言編程中實現(xiàn)二分查找的簡單入門實例,需要的朋友可以參考下
    2015-12-12
  • Qt實現(xiàn)SqlTableModel映射組件應(yīng)用小結(jié)

    Qt實現(xiàn)SqlTableModel映射組件應(yīng)用小結(jié)

    在Qt中提供了QSqlTableModel模型類,它為開發(fā)者提供了一種直觀的方式來與數(shù)據(jù)庫表格進行交互,本文就來介紹一下Qt實現(xiàn)SqlTableModel映射組件應(yīng)用小結(jié),感興趣的可以了解一下
    2023-12-12
  • C語言指針入門學(xué)習(xí)面面觀

    C語言指針入門學(xué)習(xí)面面觀

    這篇文章主要介紹了C語言指針的一些基礎(chǔ)知識,指針可以說是C語言入門學(xué)習(xí)中的頭等大事,文中從數(shù)組和函數(shù)等多方面剖析C中指針的作用,需要的朋友可以參考下
    2016-02-02
  • C++編程異常處理中try和throw以及catch語句的用法

    C++編程異常處理中try和throw以及catch語句的用法

    這篇文章主要介紹了C++編程異常處理中try和throw以及catch語句的用法,包括對Catch塊的計算方式的介紹,需要的朋友可以參考下
    2016-01-01
  • C++實現(xiàn)圖像壓縮的示例代碼

    C++實現(xiàn)圖像壓縮的示例代碼

    這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)圖像壓縮的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C++算法學(xué)習(xí)之回溯法的應(yīng)用

    C++算法學(xué)習(xí)之回溯法的應(yīng)用

    這篇文章介紹了C++算法中回溯法的一些應(yīng)用,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C++容器適配器的概念與示例

    C++容器適配器的概念與示例

    C++?STL(標準模板庫)是一套功能強大的?C++?模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu),如向量、鏈表、隊列、棧,今天我們來探究一下stl容器適配器的使用吧
    2023-01-01
  • C語言中的const和free用法詳解

    C語言中的const和free用法詳解

    C語言中的const和C++中的const是有區(qū)別的,而且在使用VS編譯測試的時候,如果是C的話,請一定要建立一個后綴為C的文件,不要是CPP的文件。因為,兩個編譯器會有差別的。下面通過本文給大家分享C語言中的const和free用法,感興趣的朋友一起看看吧
    2017-04-04
  • C++性能剖析教程之switch語句

    C++性能剖析教程之switch語句

    除了用嵌套if語句外,C++中還提供switch語句,又稱為“開關(guān)語句”,用來實現(xiàn)多分支(多選一),下面這篇文章主要給大家介紹了關(guān)于C++性能剖析教程之switch語句的相關(guān)資料,需要的朋友可以參考下
    2018-06-06
  • C++實現(xiàn)大數(shù)乘法算法代碼

    C++實現(xiàn)大數(shù)乘法算法代碼

    這篇文章主要介紹了C++實現(xiàn)大數(shù)乘法算法代碼的相關(guān)資料,需要的朋友可以參考下
    2015-03-03

最新評論

宾阳县| 麻江县| 安泽县| 都兰县| 福州市| 东安县| 双流县| 府谷县| 山丹县| 峨边| 依兰县| 肥西县| 汝南县| 宁远县| 思南县| 惠东县| 邓州市| 开化县| 桂平市| 信阳市| 五河县| 天水市| 奇台县| 泸州市| 克东县| 剑阁县| 怀仁县| 昭觉县| 周宁县| 吐鲁番市| 潮安县| 舟山市| 德庆县| 望江县| 唐海县| 张家港市| 阿坝| 广德县| 纳雍县| 新源县| 门头沟区|