• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            hdqqq

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              35 隨筆 :: 0 文章 :: 104 評論 :: 0 Trackbacks

            STL, Loki,Boost Functor 比較之 Boost ( )

            ?????? 在這一部分中 , 要討論的是 Boost 庫中的 Function 的有關功能 , 于前面兩篇不同的是 ,Boost 庫的規模相對于 Loki STL 來說 , 在規模上大了很多 , 這篇文章中討論的是 boost 中的 functor 部分 , 寫的不好之處 , 歡迎提出意見 . 寫作本文使用的是 Boost 1_33_1 版本 , 同時參考了 Boost 文檔的 function 部分的說明 .

            ?

            寫在前面

            Boost Function 功能中 , 用到了 Boost Preprocessor, 在這部分中 Boost 提供的宏預處理功能是很強大的 , 主要的宏功能有 重復生成 (BOOST_PP_REPEAT_FROM_TO), 條件判斷 (BOOST_PP_IF), 連接 (BOOST_PP_CAT), 數值比較 (BOOST_PP_GREATER), 參數枚舉 (BOOST_PP_ENUM_PARAMS) , 使用這些宏 , 可以按照自己的需要用宏生成模板類或者代碼 , 實在是一個很有效而且很創新的功能 , 可以說把預處理器的功能用到了登峰造極的地步 . 不過 , 代價是要花更多的時間在編譯上 , 我有一個 18000 行代碼的工程 , 在一個頭文件中使用了 Preprocessor 產生一些模板代碼后 , 編譯時間從原先的 4 分鐘一下子升到了 8 分多秒 ( 我的機器比較老 ), 最后不得不寫了個功能 Proxy , 隔絕 cpp 文件對該頭文件的依賴關系才縮短了編譯時間 .

            TypeTraits typetraits 的功能是在給定一個數據類型后 , 通過 c++ 的模板能力 , 來取得這個關于這個數據類型的相關信息 . Loki 庫中 , 也提供了 TypeTrait 功能 . 常用的有 判斷是否為指針 , 判斷是否為常量 , 判斷是否為引用 , 判斷是否為數值等 . 在創建模板類或者函數的時候 , 有時候需要根據模板參數的類型對模板進行特化 , 這是一個很重要的輔助功能 ,boost 中也有 typetrait 功能 , functor 生成的過程中 , 也使用了一些 typetrait 的功能 .

            ?

            ?

            Boost 的的 Functor 的頭文件位于 <boost/function.hpp> 文件中 , 有一個很重要的宏

            BOOST_FUNCTION_MAX_ARGS 用于 定義 boost 的預處理器展開的 Functor 最多的參數個數 , 缺省的定義為

            #define ? BOOST_FUNCTION_MAX_ARGS ? 10

            如果有需要擴充 Functor 的參數個數 , 可以在包含 Boost Functor 頭文件之前 , 自己定義這個宏的數值 , 但是 , 最多可以到 50, 超過這個數值后 , 需要手工修改 <boost/function/detail/maybe_include.hpp> 中的代碼 , Functor 可以使用的參數再進行擴充 .

            ?

            Boost Functor 的展開

            ?????? Boost 中使用了預處理元編程提供的疊代頭文件的功能 , 反復疊代 <boost/function/function_template.hpp>, 最終生成使用所需要的模板類

            ?

            boost::function < 返回值 ( 參數 [, 參數 ]…)>, 用戶可以使用編譯器的 /P( 微軟 c++ 編譯器 ),? -save-temps(gcc 編譯器 ) 開查看宏展開后的文件 .

            ?

            ?

            ?

            有關 STL Loki 中的 Functor 的前面兩篇位于我的另外一個 blog

            http://blog.csdn.net/hdqqq/archive/2006/02/07/593877.aspx

            http://blog.csdn.net/hdqqq/archive/2006/01/25/588348.aspx

            posted on 2006-09-13 21:39 hdqqq 閱讀(3957) 評論(1)  編輯 收藏 引用 所屬分類: c/c++

            評論

            # re: STL, Loki,Boost 中Functor比較之Boost庫(一)[未登錄] 2007-08-14 11:35 夢在天涯
            很好,寫的很不錯!!!我轉載了!非常的感謝!再次的感謝!



              回復  更多評論
              

            久久久久这里只有精品| 麻豆国内精品久久久久久| 久久综合香蕉国产蜜臀AV| 欧美午夜精品久久久久免费视| 国产麻豆精品久久一二三| 日韩美女18网站久久精品| 亚洲国产欧洲综合997久久| 国产精品久久影院| 欧美日韩精品久久免费| 伊人久久综合热线大杳蕉下载| 亚洲精品无码久久不卡| 久久精品国产精品国产精品污 | 国产高潮久久免费观看| 午夜福利91久久福利| 久久国产高清字幕中文| 久久91精品国产91| 久久99精品国产麻豆婷婷| 色欲久久久天天天综合网精品| 久久精品女人天堂AV麻| 精品国产一区二区三区久久久狼| 久久久久久无码国产精品中文字幕| 久久精品国产清高在天天线| 国产精品乱码久久久久久软件 | 久久精品国产福利国产秒| 国产精品久久久香蕉| 久久精品一区二区影院| 亚洲精品高清久久| 日本一区精品久久久久影院| 色偷偷久久一区二区三区| 狠狠色综合网站久久久久久久高清 | 91亚洲国产成人久久精品网址| 色欲综合久久中文字幕网| 久久精品国产亚洲AV蜜臀色欲| 久久久噜噜噜久久| 久久国产三级无码一区二区| 93精91精品国产综合久久香蕉| 国产精品久久久久久搜索 | 久久人人爽人人爽人人片AV东京热| 久久国产乱子伦精品免费强| 国内精品久久久久伊人av| 久久99精品国产|