函式物件 =》C語言中的函式指標
函式物件
盡管函式指標被廣泛用于實作函式回呼,但C++還提供了一個重要的實作回呼函式的方法,那就是函式物件,函式物件(也稱“函式符”)是多載了“()”運算子的普通類物件,因此從語法上講,函式物件與普通的函式行為類似,
用函式物件代替函式指標有幾個優點:
首先,因為物件可以在內部修改而不用改動外部介面,因此設計更靈活,更富有彈性,函式物件也具備有存盤先前呼叫結果的資料成員,在使用普通函式時需要將先前呼叫的結果存盤在全程或者本地靜態變數中,但是全程或者本地靜態變數有某些我們不愿意看到的缺陷,
其次,在函式物件中編譯器能實作行內呼叫,從而更進一步增強了性能,這在函式指標中幾乎是不可能實作的,
C++11還提供了limbda運算式來實作函式的靈活呼叫

為什么要用函式物件呢?

上圖中 return comp(a,b);通過函式指標呼叫函式是沒有辦法行內的,效率低,因為有函式呼叫開銷,C++通過函式物件解決
template<typename T>
class mygreater
{
public:
bool operator()(T a,T b){
return a>b;
}
};
template<typename T>
class myless
{
public:
bool operator()(T a,T b){
return a<b;
}
};
template<typename T ,typename Compare>
bool compare(T a,T b,Compare comp)
{
return comp(a,b);
}
compare(10,20,mygreater<int>());
compare(10,20,myless<int>());
1:通過函式物件呼叫operator()可以省略函式的呼叫開銷比通過函式指標呼叫函式(不能夠inline行內呼叫) 效率高
2:因為函式物件是用類生成的,所以可以添加想關的成員變數,用來記錄函式物件的使用資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540008.html
標籤:其他
上一篇:<五>詳解容器配接器
下一篇:<六>無序關聯容器
