#include<iostream>
using namespace std;
class absInt{
public:
int operator()(int val)/*函數調用操作符*/
{
return val<0?-val:val;
}
};
int main(){
int i=-41;
absInt absObj;
int ui=absObj(i);
cout<<ui<<endl;
return 0;
}
可以爲類類型的對象重載函數調用操作符。通過爲類類型的對象提供一個實參表而使用調用操作符,所用的方式看起來像一個函數調用。
儘管absObj是一個對象而不是一個函數,仍然可以“調用”該對象,效果是運行由absObj對象定義的重載調用操作符,該操作符接受一個int值並返回它的絕對值。
函數調用操作符必須聲明爲成員函數。一個類可以定義函數調用操作符的多個版本,由形參的數目或類型加以區別。
定義了調用操作符的類,其對象稱爲“函數對象”,即它們是行爲類似於函數的對象。
標準庫定義了一組算術,關係與邏輯函數對象類。定義在functional頭文件中。
#include<iostream>
#include<functional>
using namespace std;
int main(){
plus<int> intAdd;
negate<int> intNegate;
int sum=intAdd(10,20);
cout<<sum<<endl;
sum=intAdd(10,intNegate(10));
cout<<sum<<endl;
return 0;
}
標準庫提供了一組函數適配器,用於特化和擴展一元和二元函數對象。分以下兩類:
1.綁定器,將一個操作數綁定到給定值而將二元函數對象轉換爲一元函數對象
2.求反器,將謂詞函數對象的真值求反。
標準庫2個綁定器bind1st,bind2nd。每個綁定器接受一個函數對象和一個值。
標準庫2個求反器not1,not2.not1將一元函數對象的真值求反,not2將二元函數對象的真值求反。