小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

什么叫做偽函數(shù),或是函數(shù)對(duì)象?它的優(yōu)點(diǎn)是什么?

 semo_zhang 2013-03-10

 

 

這里用一個(gè)簡單的代碼片段來說明偽函數(shù)的實(shí)現(xiàn)和用法,及其優(yōu)點(diǎn)。代碼示例如下:

class Abs

{

public:

int operator()(int num)const; //這個(gè)操作符的重載是實(shí)現(xiàn)偽函數(shù)的關(guān)鍵

Abs();

void setIsOpponent(bool isOpponent);

private:

bool isOpponent;

};

//關(guān)鍵方法

int Abs::operator()(int num)const

{

int res;

if(!isOpponent)

{

res = num > 0 ? num : -num;

}

else

{

res = num > 0 ? -num : num;

}

return res;

}

Abs::Abs()

{

isOpponent = false;

}

void Abs::setIsOpponent(bool aIsOpponent)

{

isOpponent = aIsOpponent;

}

我們可以看到,由于Abs類實(shí)現(xiàn)了一個(gè)"()"操作符,這樣就允許把這個(gè)類像函數(shù)一樣使用。

我們把這樣的類稱為函數(shù)對(duì)象,或稱做偽函數(shù)。

使用示例如下:

Abs myAbs;

myAbs.setIsOpponent(true); //進(jìn)行相反操作。

int value = myAbs(-23); //這里如同把myAbs實(shí)例當(dāng)作一個(gè)函數(shù)來使用。

優(yōu)點(diǎn):使用仿函數(shù)就像使用一個(gè)普通的函數(shù)一樣,但是它的實(shí)現(xiàn)可以訪問仿函數(shù)中所有的成員變量來進(jìn)行通行;而普通函數(shù)若要通信就只能依靠全局變量了。

(http://blog./u3/90609/showart_1811637.html)

Bjarne: 什么是函數(shù)對(duì)象?

顧名思義,就是在某種方式上表現(xiàn)的象一個(gè)函數(shù)的對(duì)象。典型的,它是指一個(gè)類的實(shí)例,這個(gè)類定義了應(yīng)用操作符operator()。

函數(shù)對(duì)象是比函數(shù)更加通用的概念,因?yàn)楹瘮?shù)對(duì)象可以定義跨越多次調(diào)用的可持久的部分(類似靜態(tài)局部變量),同時(shí)又能從對(duì)象的外面進(jìn)行初始化和檢查(和靜態(tài)局部變量不同)。例如:

class Sum

{

int val;
public:

Sum(int i):val(i) {}

operator int() const { return val; } // 取得值

int operator()(int i) { return val+=i; } // 應(yīng)用
};

void f(vector v)
{
Sum s = 0; // initial value 0
s = for_each(v.begin(), v.end(), s); // 求所有元素的和
cout << "the sum is " << s << "/n";

//或者甚至:
cout << "the sum is " << for_each(v.begin(), v.end(), Sum(0)) << "/n";

}

注意:一個(gè)擁有應(yīng)用操作符的函數(shù)對(duì)象可以被完美地內(nèi)聯(lián)化(inline),因?yàn)樗鼪]有涉及到任何指針,后者可能導(dǎo)致拒絕優(yōu)化。與之形成對(duì)比的是,現(xiàn)有的優(yōu)化器幾乎不能(或者完全不能?)將一個(gè)通過函數(shù)指針的調(diào)用內(nèi)聯(lián)化。

在標(biāo)準(zhǔn)庫中,函數(shù)對(duì)象被廣泛的使用以獲得彈性。

http://hi.baidu.com/ilotus_y/blog/item/7a1044d3b23f6fdaa9ec9a87.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多