Functor
Functor 簡單來說就是具有 function 功能的 object (或是說把Struct或Class假裝成一個函式的樣子。)(仿函數跟callback函數很類似)
因此 functor 讓我們可以像是呼叫 function 般的去使用?
這個技巧賦予我們在寫程式時更方便與安全的方法
ex:
struct absValue // absValue 是functor的名字
{
float operator()(float f) { // functor的重點在於這個 operator()
return f > 0 ? f : -f;
}
};
or ...
struct compareS // functor的重點在於這個 operator()
{
int m_a;
bool operator()(int a , int b) {
m_a = a; //這邊可以紀錄資料
return (a<b);
}
};
使用方法是
std::vector<int> v;
std:: sort( v.begin(), v.end(), compareS() )
所以可以說 , 是一個 overload operator的class object 或是 struct.
進一步說 , functor 有用的地方就在於他本身其實是個 object,所以他比 function 多了記錄資料的功能,這個能力促使我們更加靈活與方便的撰寫程式而不會受限於 function 的規格。善加利用這個技巧,我們就可以在 OO 的設計上有更多的選擇,
沒有留言:
張貼留言