作者loveme00835 (高髮箍)
看板C_and_CPP
標題Re: [問題] function pointer 和 function object
時間Fri Sep 30 18:13:44 2011
※ 引述《pracinverse (改)》之銘言:
: 書上看到 function object 和function pointer 的不同在於function Pointer
: 無法持有自己的狀態,請問這是什麼意思呢?可以提供例子嗎?thanks
1) function object(函式物件=functor, 仿函式)
「任何可使用函式呼叫語法」進行呼叫的
物件
2) function pointer(函式指標)
是一種functor, 可指向某個函式, 使用函式呼叫的語法將引數傳
給指向的函式, 由該函式完成指派任務
(函式不是物件, 故不在此類別內)
-
除了第二類之外, 因為class型別可以透過重載operator()使得該類別
的物件可以視為functor,
不同的物件可擁有各自的屬性以表達各自的
狀態, 也就是說當我要達成:
「每一次呼叫即回傳: (上次傳入的引數 + k)」, 程式碼就像這樣
class plus {
int _k;
int _prev;
public:
plus(
int k): _k(k), _prev(0) { }
int operator()(
int p){
int ret = _prev + _k;
_prev = p;
return ret;
}
};
plus a( -5 );
a( 7 );
// 回傳 -5
a( 3 );
// 回傳 2
a( -1 );
// 回傳 -2
-
另一方面函式指標只記錄了函式的位置, 想有不同行為就只能指向
不同函式, 而且
狀態無法轉移給另一個指標.
functor是一個操作概念, 並不特指某些實作.
--
★ ★ ★ ★
★ ★ ★ ███ ███ █ █▌█ ██◣ ███ ▋▋█ ★ ★ ★
█▂█ █▃█ █ ███ █▆█ █▄█ ███
★ ★ █ ◣ █ █ █ ▋██ █▆◤ ███ ███ ★ ★
Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook
φwindyhorse
No Eul Oh Seung A Jung Yoon Hye
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (09/30 18:29)
推 VictorTom:Push~~ 09/30 21:07
推 pracinverse:THANKS 09/30 21:46
推 xatier:推! 10/01 12:46
推 h520:推 題外話 曾看到有人說最好不要用"functor"這個字 10/14 22:09
→ h520:因為在Category theory那是另外一個東西 不過我想見仁見智:) 10/14 22:10