看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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