青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰(shuí)的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

CGL開(kāi)發(fā)手記之三--CGL中的"函數(shù)對(duì)象"

        需要注意的是,本節(jié)題目中"函數(shù)對(duì)象"四字是加了雙引號(hào)的,因?yàn)镃語(yǔ)言中沒(méi)有辦法做到類C++中函數(shù)對(duì)象的做法,CGL中采用的替代手段是使用函數(shù)指針.

        首先需要短暫回顧STL中的函數(shù)對(duì)象以及函數(shù)對(duì)象適配器等概念.

        STL中的最基本的函數(shù)對(duì)象分為三類:generator, unary function,binary function,其中的generator是無(wú)參數(shù)函數(shù),unary function是單參數(shù)函數(shù),binary function是雙參數(shù)函數(shù).注意,以上只是提到的三者的傳入?yún)?shù)的數(shù)量,還沒(méi)有涉及到它們所要返回的參數(shù)類型.一般的,三者都是以template參數(shù)作為自己返回參數(shù)的類型,但是當(dāng)unary function和binary function返回參數(shù)是bool型的時(shí)候,分別稱它們?yōu)?predicate和binary predicate,這是因?yàn)镾TL中很多范型參數(shù)的調(diào)用需要傳入一個(gè)函數(shù)對(duì)象進(jìn)行元素的比較.如sort,find_if等函數(shù).

        函數(shù)對(duì)象適配器分為兩類:一類是綁定器(binder),另外一類是取反器(negator),綁定器用于綁定函數(shù)對(duì)象中的某個(gè)參數(shù),取反器用于將函數(shù)對(duì)象的返回值進(jìn)行翻轉(zhuǎn),一般的,可以使用取反器的函數(shù)對(duì)象都是那些返回值為bool型的函數(shù)對(duì)象.

        CGL中不能實(shí)現(xiàn)函數(shù)適配器,因?yàn)榻壎ㄆ髟诮壎▍?shù)的時(shí)候是通過(guò)將所需要綁定的參數(shù)作為模版參數(shù)傳遞給函數(shù)對(duì)象類進(jìn)行參數(shù)綁定的,如:
template <class Operation> 
class binder2nd
  : 
public unary_function<typename Operation::first_argument_type,
                          
typename Operation::result_type> {
protected:
  Operation op;
  
typename Operation::second_argument_type value;
public:
  binder2nd(
const Operation& x,
            
const typename Operation::second_argument_type& y) 
      : op(x), value(y) {}
  
typename Operation::result_type
  operator()(
const typename Operation::first_argument_type& x) const {
    return op(x, value); 
  }
};

template 
<class Operation, class T>
inline binder2nd
<Operation> bind2nd(const Operation& op, const T& x) {
  typedef 
typename Operation::second_argument_type arg2_type;
  return binder2nd
<Operation>(op, arg2_type(x));
}

以上是綁定器bind2nd函數(shù)的實(shí)現(xiàn),你可以看到這個(gè)函數(shù)是返回一個(gè)binder2nd的函數(shù)對(duì)象類,而所需要綁定的參數(shù)作為binder2nd的value參數(shù)存儲(chǔ)起來(lái),在調(diào)用binder2nd的operator()時(shí)再使用value參數(shù),由于C中沒(méi)有辦法做到重載operator()函數(shù),所以不能實(shí)現(xiàn)binder.

同樣的,C中也沒(méi)有辦法實(shí)現(xiàn)negator函數(shù)對(duì)象適配器,見(jiàn)代碼:
template <class Predicate>
class unary_negate
  : 
public unary_function<typename Predicate::argument_type, bool> {
protected:
  Predicate pred;
public:
  
explicit unary_negate(const Predicate& x) : pred(x) {}
  bool operator()(
const typename Predicate::argument_type& x) const {
    return !pred(x);
  }
};

template 
<class Predicate>
inline unary_negate
<Predicate> not1(const Predicate& pred) {
  return unary_negate
<Predicate>(pred);
}

以上是negator函數(shù)not1函數(shù)的實(shí)現(xiàn).可以看到這個(gè)函數(shù)返回一個(gè)unary_negate函數(shù)對(duì)象,而在這個(gè)函數(shù)對(duì)象重載的operator()中對(duì)pred函數(shù)的返回值進(jìn)行取反以達(dá)到negator函數(shù)對(duì)象適配器的作用,同樣的,用于C中不能做到重載operator(),所以沒(méi)有辦法實(shí)現(xiàn)negator函數(shù)對(duì)象適配器.

STL中還有一些預(yù)定義的函數(shù)對(duì)象如plus,equal_to等,見(jiàn)代碼:
template <class T>
struct plus : 
public binary_function<T, T, T> {
    T operator()(
const T& x, const T& y) const { return x + y; }
};

plus的函數(shù)參數(shù)是通過(guò)模版參數(shù)T傳入的,任何想要采用plus的類型都需要提供operator + 操作符.因?yàn)檫@個(gè)特點(diǎn),C中也沒(méi)有辦法實(shí)現(xiàn)這些預(yù)定義的函數(shù)對(duì)象.

        鑒于以上的原因,CGL中的"函數(shù)對(duì)象"被定義為幾種函數(shù)指針:
       
typedef bool_t    (*binary_predicate)(data_t tData1, data_t tData2);
typedef void    (
*binary_func)(data_t tData1, data_t tData2, data_t tResult);
typedef void    (
*binary_func2)(data_t tData1, data_t tData2);

typedef bool_t    (
*unary_predicate)(data_t tData);
typedef void    (
*unary_func)(data_t tData, data_t tResult);
typedef void    (
*unary_func2)(data_t tData);

typedef void    (
*generator_func)(data_t tResult);
typedef void    (
*generator_func2)();

     這些函數(shù)指針的返回值只有兩種,bool_t和void,當(dāng)需要返回除了boot_t之外的返回值時(shí),將保存返回值的指針tResult傳入函數(shù)中保存返回值,所有CGL中使用的函數(shù)指針都只可能是以上的幾種函數(shù)指針類型.
        


posted on 2007-05-07 16:53 那誰(shuí) 閱讀(943) 評(píng)論(0)  編輯 收藏 引用 所屬分類: CGL

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲九九精品| 韩日精品中文字幕| 亚洲天堂av高清| 午夜亚洲激情| 国产日韩高清一区二区三区在线| 午夜免费在线观看精品视频| 久久久久亚洲综合| 亚洲第一区中文99精品| 欧美大色视频| 亚洲手机视频| 久久久久久久成人| 亚洲精品国产精品久久清纯直播| 欧美精品在线免费观看| 亚洲天堂第二页| 久久久久五月天| 日韩亚洲欧美成人一区| 国产精品毛片一区二区三区| 久久久7777| 亚洲毛片视频| 乱中年女人伦av一区二区| 一本到高清视频免费精品| 国产精品人成在线观看免费 | 亚洲国产精品第一区二区三区| 9色国产精品| 国产欧美一区二区三区另类精品| 久久婷婷久久一区二区三区| 日韩视频在线一区| 免费久久99精品国产自| 亚洲午夜精品久久| 在线激情影院一区| 国产精品免费看片| 免费视频最近日韩| 欧美一区二区成人| 99国产精品久久| 欧美激情按摩在线| 欧美制服丝袜第一页| 亚洲美女精品久久| 狠狠色丁香婷婷综合影院| 欧美亚洲成人精品| 欧美黑人在线观看| 久久精品国产亚洲精品| av不卡在线| 亚洲第一福利社区| 久久三级福利| 欧美在线观看你懂的| 一区二区三区久久精品| 亚洲福利国产| 国产一区高清视频| 国产欧美欧洲在线观看| 欧美日韩中文字幕在线视频| 美女性感视频久久久| 久久gogo国模啪啪人体图| 亚洲性视频h| 亚洲精品中文字幕有码专区| 欧美激情成人在线视频| 牛牛影视久久网| 久久久www免费人成黑人精品 | 亚洲欧美中日韩| aa日韩免费精品视频一| 亚洲欧洲综合| 亚洲国产欧美精品| 欧美高清在线| 欧美mv日韩mv国产网站| 毛片av中文字幕一区二区| 久久av在线| 久久av资源网| 久久精品亚洲精品| 久久精品99国产精品酒店日本| 亚洲欧美一区在线| 性久久久久久久久久久久| 亚洲欧美综合网| 欧美一区二区精品久久911| 欧美亚洲综合网| 久久成年人视频| 久久成人精品无人区| 欧美在线一级va免费观看| 亚洲欧美日本伦理| 欧美影院午夜播放| 欧美一级午夜免费电影| 久久精品国产亚洲a| 久久精品夜色噜噜亚洲a∨| 久久久久久久999| 蘑菇福利视频一区播放| 欧美激情一区二区三区不卡| 亚洲国产高清在线观看视频| 亚洲经典自拍| 中文在线不卡| 午夜在线视频观看日韩17c| 欧美一区二区视频网站| 久久久久久久久久码影片| 欧美成人一区在线| 欧美视频在线观看一区二区| 国产精品美女久久久久久免费| 国产精品尤物福利片在线观看| 国产在线视频欧美| 亚洲国产成人不卡| 一区二区三区免费看| 性欧美大战久久久久久久免费观看| 久久av一区二区三区漫画| 免费永久网站黄欧美| 亚洲欧洲日韩在线| 亚洲四色影视在线观看| 久久久久久网址| 欧美精品日韩综合在线| 国产欧美日韩一区二区三区在线观看| 国产日韩一区在线| 亚洲欧洲久久| 香蕉亚洲视频| 欧美激情亚洲激情| 亚洲调教视频在线观看| 久久久久久亚洲精品杨幂换脸 | 久久嫩草精品久久久精品| 亚洲高清视频一区| 亚洲午夜影视影院在线观看| 久久裸体视频| 国产精品久久毛片a| 在线看一区二区| 亚洲主播在线观看| 欧美a级理论片| 亚洲一区二区三区中文字幕| 另类欧美日韩国产在线| 国产精品有限公司| 日韩午夜激情| 美女黄毛**国产精品啪啪| 一本色道久久综合狠狠躁的推荐| 欧美一区二区三区成人| 欧美色图麻豆| 在线看片欧美| 久久精品视频一| 一本大道久久精品懂色aⅴ| 久久午夜国产精品| 国产欧美精品在线| 一区二区三区精密机械公司| 女女同性精品视频| 欧美一区激情| 国产精品美女午夜av| 日韩午夜激情电影| 免费成人激情视频| 欧美亚洲在线| 国产精品久久夜| 亚洲午夜国产成人av电影男同| 老巨人导航500精品| 午夜久久福利| 国产精品日韩专区| 亚洲视频日本| 亚洲精品黄色| 美日韩精品免费| 亚洲国产精品va| 久久综合色综合88| 性欧美激情精品| 国产精品网站在线观看| 西西裸体人体做爰大胆久久久| 亚洲精品美女在线观看| 欧美国内亚洲| 亚洲精品一区二区三区av| 亚洲第一搞黄网站| 免费不卡中文字幕视频| **网站欧美大片在线观看| 久久一区欧美| 久久综合给合久久狠狠狠97色69| 国产综合久久| 麻豆免费精品视频| 久久亚洲一区二区三区四区| 一区二区亚洲| 免费在线观看一区二区| 久久婷婷国产麻豆91天堂| 在线日韩一区二区| 欧美丰满高潮xxxx喷水动漫| 久久天堂国产精品| 亚洲国产成人精品女人久久久 | 亚洲美女免费精品视频在线观看| 欧美成人官网二区| 亚洲精品一区二区三区不| 亚洲欧洲精品一区二区| 欧美视频一区二| 午夜综合激情| 久久精品国产亚洲一区二区三区 | 一本色道久久综合亚洲精品按摩| 欧美日韩国产另类不卡| 亚洲无亚洲人成网站77777| 一本一道久久综合狠狠老精东影业 | 亚洲免费在线电影| 亚洲一区二区三区久久| 国产一区二区精品久久| 美女视频黄免费的久久| 鲁大师影院一区二区三区| 亚洲精品一区二区网址| 日韩亚洲国产精品| 国产精品视频一| 久热精品在线| 欧美激情在线狂野欧美精品| 亚洲男人影院| 久久久国产一区二区三区| 亚洲日韩视频| 亚洲影院在线观看| 91久久精品美女高潮| 夜夜嗨av一区二区三区四季av | 一区二区三区欧美在线| 国内精品久久久久久久影视麻豆 | 亚洲三级视频|