[問題] 關於func的引數仍然是func 該怎麼稱呼?

看板C_and_CPP作者 (魯騎)時間8年前發表 (2017/04/22 07:14), 8年前編輯推噓16(16034)
留言50則, 14人參與, 最新討論串1/1
舉個小例子 typedef int(*funPtr)(int, int); int add(int a,int b) { return a + b; } int sub(int a, int b) { return a - b; } void Math(funPtr callback) { printf("Time to Math class, result = %d\n", callback(5, 1)); } int main() { Math(add); Math(sub); char c = getchar(); return 0; } 其中的 Math(add) 該怎麼敘述他呢? Ans1: 我把add註冊到Math裡面 Ans2: add 是一個callback func 並放到 Math 裡面 大家聽到callback func就知道這func是引數的意思嗎? 不好意思 新手問題 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.206.89 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1492845281.A.922.html

04/22 15:24, , 1F
2 你並沒有註冊他 只是傳進去 1很奇怪
04/22 15:24, 1F

04/22 15:45, , 2F
Math(add)是把add這隻function的以function pointer
04/22 15:45, 2F

04/22 15:45, , 3F
的形式傳入Math的參數列。讓裡面的Math呼叫可以用fu
04/22 15:45, 3F

04/22 15:45, , 4F
nction pointer來呼叫add, 做兩數相加的加法運算。
04/22 15:45, 4F

04/22 15:50, , 5F
Function pointer 提供了一種彈性的函數呼叫方式。
04/22 15:50, 5F

04/22 15:50, , 6F
以原po的例子來說,可以再實作兩個數學函數,mul做
04/22 15:50, 6F

04/22 15:50, , 7F
乘法,div做除法。擴展成一個小型的四則運算程式。
04/22 15:50, 7F

04/22 15:56, , 8F
Callback function在原po的例子裡是add和sub. add和
04/22 15:56, 8F

04/22 15:56, , 9F
sub這兩個以function pointer傳入Math(), 在Math()
04/22 15:56, 9F

04/22 15:56, , 10F
裡面被呼叫。
04/22 15:56, 10F
cuteSquirrel: Ans2比較貼近原po的例子。 謝謝兩位 我只是好奇我告訴別人說 add & sub 是callback func 這樣我同事們就知道這是要被當作func pointer傳入其他func作為引數嗎? 因為連我自己都無法定義清楚了 冏 ※ 編輯: EngRookie (150.117.206.89), 04/22/2017 16:22:22

04/22 19:17, , 11F
我覺得改一下函數命名會比較好閱讀一點
04/22 19:17, 11F

04/22 22:47, , 12F
在其他語言好像叫delegate?
04/22 22:47, 12F

04/22 23:20, , 13F
推。像是c#的delegate
04/22 23:20, 13F

04/22 23:31, , 14F
不過 delegate 在某些語境下又會有完全不同的意思 XD
04/22 23:31, 14F

04/22 23:45, , 15F
應該知道吧
04/22 23:45, 15F

04/23 08:26, , 16F
C++講delegate,我第一個想到的是delegating ctor
04/23 08:26, 16F

04/24 19:18, , 17F
higher-order function
04/24 19:18, 17F

04/25 01:17, , 19F
不過用higher-order有不小的機會會被問這是啥意思...XD
04/25 01:17, 19F

04/25 09:40, , 20F
higher-order function +1
04/25 09:40, 20F

04/26 00:12, , 21F
每次都要搞名詞解釋 真的很煩
04/26 00:12, 21F

04/26 00:12, , 22F
是不是都用名詞當鬥爭工具? 講贏定義的人是老大?
04/26 00:12, 22F

04/26 05:38, , 23F
樓上 這裡的老大只有一個喔 請去拜見水晶球神
04/26 05:38, 23F

04/26 05:40, , 24F
不過這篇本來就是在問名詞,給名詞解釋問題在哪?
04/26 05:40, 24F

04/26 11:29, , 25F
只傳函數進去不算callback,必須是要是下個流程才算(CPS
04/26 11:29, 25F

04/26 11:39, , 26F
也就說傳進來的函數也必定只能以tail call的方式使用
04/26 11:39, 26F

04/26 22:37, , 27F
你可以查一下學一下functor, 近代的c++多半用這結構
04/26 22:37, 27F

04/26 22:37, , 28F
體來表示一個function 而不是把point of function傳入
04/26 22:37, 28F

04/26 22:39, , 29F
優點很多,包括了簡易的型別安全以及易用性 可以學一下
04/26 22:39, 29F

04/26 22:41, , 30F
C++11以前須用boost::function,11後有std::function
04/26 22:41, 30F

04/26 22:41, , 31F

04/27 07:23, , 32F
名詞是設計者的問題 template在c++ java不一樣
04/27 07:23, 32F

04/27 07:23, , 33F
apply bind在c++ js不一樣
04/27 07:23, 33F

04/27 07:27, , 34F
for each拿到index還是內容物 在py js不一樣
04/27 07:27, 34F

04/27 07:29, , 35F
不過打架久了大家也漸漸知道 先說是哪家語言的定義
04/27 07:29, 35F

04/27 07:30, , 36F
如果你覺得煩 那就可以加入語言開發社群或委員
04/27 07:30, 36F

04/27 07:31, , 37F
出一份力改善這種到處不一樣的狀況
04/27 07:31, 37F

04/27 11:25, , 38F
名詞解釋有啥好煩的,難道要吵一架吵完之後才發現兩個人跟
04/27 11:25, 38F

04/27 11:26, , 39F
本是在講不同的東西只是剛好共用名詞有比較好嗎XDD
04/27 11:26, 39F

04/27 12:30, , 40F
通常在討論語言特性的時候會用higher-order function
04/27 12:30, 40F

04/27 12:30, , 41F
用 category 討論程式實作會用 functor 這個詞
04/27 12:30, 41F

04/27 12:30, , 42F
雖然這兩個詞在 theorical computer science 裡實際上指
04/27 12:30, 42F

04/27 12:30, , 43F
的是同一個東西,但是在不同情境下我們會用不同的詞來討
04/27 12:30, 43F

04/27 12:30, , 44F
04/27 12:30, 44F

04/27 12:30, , 45F
另外, functor 還分 contravariant、 convariant 兩種,
04/27 12:30, 45F

04/27 12:30, , 46F
但 higher-order function 就沒討論這麼多了
04/27 12:30, 46F

04/27 12:30, , 47F
不過 functor 在很多語言裡已經有自己的意思了,和 TSC
04/27 12:30, 47F

04/27 12:30, , 48F
裡的定義不同
04/27 12:30, 48F

04/27 12:45, , 49F
functor 雖然也可以傳入、回傳函數,但是專指這樣的函數
04/27 12:45, 49F

04/27 12:45, , 50F
會用 higher-order function 來稱呼
04/27 12:45, 50F
文章代碼(AID): #1O-mBXaY (C_and_CPP)