Re: [問題] function pointer 和 function object
※ 引述《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)
推
09/30 21:07, , 1F
09/30 21:07, 1F
推
09/30 21:46, , 2F
09/30 21:46, 2F
推
10/01 12:46, , 3F
10/01 12:46, 3F
推
10/14 22:09, , 4F
10/14 22:09, 4F
→
10/14 22:10, , 5F
10/14 22:10, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
11
38