• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              35 隨筆 :: 0 文章 :: 104 評(píng)論 :: 0 Trackbacks

            STL, Loki,Boost Functor 比較之 Boost 庫(kù) ( )

            ?????? 在這一部分中 , 要討論的是 Boost 庫(kù)中的 Function 的有關(guān)功能 , 于前面兩篇不同的是 ,Boost 庫(kù)的規(guī)模相對(duì)于 Loki STL 來(lái)說(shuō) , 在規(guī)模上大了很多 , 這篇文章中討論的是 boost 中的 functor 部分 , 寫(xiě)的不好之處 , 歡迎提出意見(jiàn) . 寫(xiě)作本文使用的是 Boost 1_33_1 版本 , 同時(shí)參考了 Boost 文檔的 function 部分的說(shuō)明 .

            ?

            寫(xiě)在前面

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

            TypeTraits typetraits 的功能是在給定一個(gè)數(shù)據(jù)類(lèi)型后 , 通過(guò) c++ 的模板能力 , 來(lái)取得這個(gè)關(guān)于這個(gè)數(shù)據(jù)類(lèi)型的相關(guān)信息 . Loki 庫(kù)中 , 也提供了 TypeTrait 功能 . 常用的有 判斷是否為指針 , 判斷是否為常量 , 判斷是否為引用 , 判斷是否為數(shù)值等 . 在創(chuàng)建模板類(lèi)或者函數(shù)的時(shí)候 , 有時(shí)候需要根據(jù)模板參數(shù)的類(lèi)型對(duì)模板進(jìn)行特化 , 這是一個(gè)很重要的輔助功能 ,boost 中也有 typetrait 功能 , functor 生成的過(guò)程中 , 也使用了一些 typetrait 的功能 .

            ?

            ?

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

            BOOST_FUNCTION_MAX_ARGS 用于 定義 boost 的預(yù)處理器展開(kāi)的 Functor 最多的參數(shù)個(gè)數(shù) , 缺省的定義為

            #define ? BOOST_FUNCTION_MAX_ARGS ? 10

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

            ?

            Boost Functor 的展開(kāi)

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

            ?

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

            ?

            ?

            ?

            有關(guān) STL Loki 中的 Functor 的前面兩篇位于我的另外一個(gè) 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 閱讀(3978) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): c/c++

            評(píng)論

            # re: STL, Loki,Boost 中Functor比較之Boost庫(kù)(一)[未登錄](méi) 2007-08-14 11:35 夢(mèng)在天涯
            很好,寫(xiě)的很不錯(cuò)!!!我轉(zhuǎn)載了!非常的感謝!再次的感謝!



              回復(fù)  更多評(píng)論
              

            久久精品国产福利国产秒| 国产99久久久国产精品小说| 日批日出水久久亚洲精品tv| 国产69精品久久久久99尤物| 久久人人爽人人爽人人AV东京热| 久久亚洲AV成人无码软件| 狠狠色婷婷久久一区二区| 亚洲人成网亚洲欧洲无码久久| 99久久无色码中文字幕人妻| 久久精品三级视频| MM131亚洲国产美女久久| 精品无码久久久久久久久久| 国产香蕉久久精品综合网| 韩国三级大全久久网站| 久久久久九九精品影院| av国内精品久久久久影院| 精品多毛少妇人妻AV免费久久 | 日产精品久久久久久久性色| 一本大道久久a久久精品综合| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 99热精品久久只有精品| 伊人久久综合无码成人网| 久久久久久九九99精品| 少妇无套内谢久久久久| 亚洲中文字幕久久精品无码喷水 | 99蜜桃臀久久久欧美精品网站| 久久强奷乱码老熟女网站| 激情久久久久久久久久| 伊色综合久久之综合久久| 亚洲中文久久精品无码| 久久久无码精品亚洲日韩京东传媒| 久久―日本道色综合久久| 亚洲va中文字幕无码久久不卡 | 嫩草影院久久99| 久久精品国产福利国产琪琪 | 久久996热精品xxxx| 久久天天日天天操综合伊人av| 久久久久99精品成人片直播| 国内精品久久久久伊人av| 国产精品女同一区二区久久| 午夜精品久久久久久影视riav|