作者EngRookie (魯騎)
看板C_and_CPP
標題[問題] 關於func的引數仍然是func 該怎麼稱呼?
時間Sat Apr 22 15:14:39 2017
舉個小例子
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1492845281.A.922.html
1F:→ x000032001: 2 你並沒有註冊他 只是傳進去 1很奇怪 04/22 15:24
2F:推 cuteSquirrel: Math(add)是把add這隻function的以function pointer 04/22 15:45
3F:→ cuteSquirrel: 的形式傳入Math的參數列。讓裡面的Math呼叫可以用fu 04/22 15:45
4F:→ cuteSquirrel: nction pointer來呼叫add, 做兩數相加的加法運算。 04/22 15:45
5F:→ cuteSquirrel: Function pointer 提供了一種彈性的函數呼叫方式。 04/22 15:50
6F:→ cuteSquirrel: 以原po的例子來說,可以再實作兩個數學函數,mul做 04/22 15:50
7F:→ cuteSquirrel: 乘法,div做除法。擴展成一個小型的四則運算程式。 04/22 15:50
8F:推 cuteSquirrel: Callback function在原po的例子裡是add和sub. add和 04/22 15:56
9F:→ cuteSquirrel: sub這兩個以function pointer傳入Math(), 在Math() 04/22 15:56
10F:→ cuteSquirrel: 裡面被呼叫。 04/22 15:56
推 cuteSquirrel: Ans2比較貼近原po的例子。
謝謝兩位 我只是好奇我告訴別人說 add & sub 是callback func
這樣我同事們就知道這是要被當作func pointer傳入其他func作為引數嗎?
因為連我自己都無法定義清楚了 冏
※ 編輯: EngRookie (150.117.206.89), 04/22/2017 16:22:22
11F:推 kyuudonut: 我覺得改一下函數命名會比較好閱讀一點 04/22 19:17
12F:推 s89227: 在其他語言好像叫delegate? 04/22 22:47
13F:推 cuteSquirrel: 推。像是c#的delegate 04/22 23:20
14F:→ uranusjr: 不過 delegate 在某些語境下又會有完全不同的意思 XD 04/22 23:31
15F:推 steve1012: 應該知道吧 04/22 23:45
16F:推 loveflames: C++講delegate,我第一個想到的是delegating ctor 04/23 08:26
17F:推 CoNsTaR: higher-order function 04/24 19:18
19F:→ Chikei: 不過用higher-order有不小的機會會被問這是啥意思...XD 04/25 01:17
20F:推 Neisseria: higher-order function +1 04/25 09:40
21F:→ ah7675: 每次都要搞名詞解釋 真的很煩 04/26 00:12
22F:→ ah7675: 是不是都用名詞當鬥爭工具? 講贏定義的人是老大? 04/26 00:12
23F:推 CoNsTaR: 樓上 這裡的老大只有一個喔 請去拜見水晶球神 04/26 05:38
24F:推 CoNsTaR: 不過這篇本來就是在問名詞,給名詞解釋問題在哪? 04/26 05:40
25F:推 ronin728: 只傳函數進去不算callback,必須是要是下個流程才算(CPS 04/26 11:29
26F:→ ronin728: 也就說傳進來的函數也必定只能以tail call的方式使用 04/26 11:39
27F:推 Killercat: 你可以查一下學一下functor, 近代的c++多半用這結構 04/26 22:37
28F:→ Killercat: 體來表示一個function 而不是把point of function傳入 04/26 22:37
29F:→ Killercat: 優點很多,包括了簡易的型別安全以及易用性 可以學一下 04/26 22:39
30F:→ Killercat: C++11以前須用boost::function,11後有std::function 04/26 22:41
32F:推 Sidney0503: 名詞是設計者的問題 template在c++ java不一樣 04/27 07:23
33F:→ Sidney0503: apply bind在c++ js不一樣 04/27 07:23
34F:→ Sidney0503: for each拿到index還是內容物 在py js不一樣 04/27 07:27
35F:→ Sidney0503: 不過打架久了大家也漸漸知道 先說是哪家語言的定義 04/27 07:29
36F:→ Sidney0503: 如果你覺得煩 那就可以加入語言開發社群或委員 04/27 07:30
37F:→ Sidney0503: 出一份力改善這種到處不一樣的狀況 04/27 07:31
38F:→ Chikei: 名詞解釋有啥好煩的,難道要吵一架吵完之後才發現兩個人跟 04/27 11:25
39F:→ Chikei: 本是在講不同的東西只是剛好共用名詞有比較好嗎XDD 04/27 11:26
40F:推 CoNsTaR: 通常在討論語言特性的時候會用higher-order function 04/27 12:30
41F:→ CoNsTaR: 用 category 討論程式實作會用 functor 這個詞 04/27 12:30
42F:→ CoNsTaR: 雖然這兩個詞在 theorical computer science 裡實際上指 04/27 12:30
43F:→ CoNsTaR: 的是同一個東西,但是在不同情境下我們會用不同的詞來討 04/27 12:30
44F:→ CoNsTaR: 論 04/27 12:30
45F:→ CoNsTaR: 另外, functor 還分 contravariant、 convariant 兩種, 04/27 12:30
46F:→ CoNsTaR: 但 higher-order function 就沒討論這麼多了 04/27 12:30
47F:→ CoNsTaR: 不過 functor 在很多語言裡已經有自己的意思了,和 TSC 04/27 12:30
48F:→ CoNsTaR: 裡的定義不同 04/27 12:30
49F:推 CoNsTaR: functor 雖然也可以傳入、回傳函數,但是專指這樣的函數 04/27 12:45
50F:→ CoNsTaR: 會用 higher-order function 來稱呼 04/27 12:45