Re: [問題] function pointer 和 function object

看板C_and_CPP (C/C++)作者 (高髮箍)時間14年前 (2011/09/30 18:13), 編輯推噓4(401)
留言5則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《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
Push~~
09/30 21:07, 1F

09/30 21:46, , 2F
THANKS
09/30 21:46, 2F

10/01 12:46, , 3F
推!
10/01 12:46, 3F

10/14 22:09, , 4F
推 題外話 曾看到有人說最好不要用"functor"這個字
10/14 22:09, 4F

10/14 22:10, , 5F
因為在Category theory那是另外一個東西 不過我想見仁見智:)
10/14 22:10, 5F
文章代碼(AID): #1EXPPRff (C_and_CPP)
文章代碼(AID): #1EXPPRff (C_and_CPP)