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

作者: EngRookie (EngRookie)   2017-04-22 15:14:39
舉個小例子
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是引數的意思嗎?
不好意思 新手問題
謝謝
作者: x000032001 (版廢了該走了)   2017-04-22 15:24:00
2 你並沒有註冊他 只是傳進去 1很奇怪
作者: cuteSquirrel (松鼠)   2017-04-22 15:45:00
Math(add)是把add這隻function的以function pointer的形式傳入Math的參數列。讓裡面的Math呼叫可以用function pointer來呼叫add, 做兩數相加的加法運算。Function pointer 提供了一種彈性的函數呼叫方式。以原po的例子來說,可以再實作兩個數學函數,mul做乘法,div做除法。擴展成一個小型的四則運算程式。Callback function在原po的例子裡是add和sub. add和sub這兩個以function pointer傳入Math(), 在Math()裡面被呼叫。
作者: kyuudonut (善良老百姓)   2017-04-22 19:17:00
我覺得改一下函數命名會比較好閱讀一點
作者: s89227 (Kei)   2017-04-22 22:47:00
在其他語言好像叫delegate?
作者: cuteSquirrel (松鼠)   2017-04-22 23:20:00
推。像是c#的delegate
作者: uranusjr (←這人是超級笨蛋)   2017-04-22 23:31:00
不過 delegate 在某些語境下又會有完全不同的意思 XD
作者: steve1012 (steve)   2017-04-22 23:45:00
應該知道吧
作者: loveflames (咕啾咕啾魔法陣)   2017-04-23 08:26:00
C++講delegate,我第一個想到的是delegating ctor
作者: CoNsTaR ((const *))   2017-04-24 19:18:00
higher-order function
作者: Chikei ( )   2017-04-25 01:03:00
https://en.wikipedia.org/wiki/Higher-order_function不過用higher-order有不小的機會會被問這是啥意思...XD
作者: Neisseria (Neisseria)   2017-04-25 09:40:00
higher-order function +1
作者: ah7675 (阿毛)   2017-04-26 00:12:00
每次都要搞名詞解釋 真的很煩是不是都用名詞當鬥爭工具? 講贏定義的人是老大?
作者: CoNsTaR ((const *))   2017-04-26 05:38:00
樓上 這裡的老大只有一個喔 請去拜見水晶球神不過這篇本來就是在問名詞,給名詞解釋問題在哪?
作者: ronin728 (浪人)   2017-04-26 11:29:00
只傳函數進去不算callback,必須是要是下個流程才算(CPS也就說傳進來的函數也必定只能以tail call的方式使用
作者: Killercat (殺人貓™)   2017-04-26 22:37:00
你可以查一下學一下functor, 近代的c++多半用這結構體來表示一個function 而不是把point of function傳入優點很多,包括了簡易的型別安全以及易用性 可以學一下C++11以前須用boost::function,11後有std::functionhttps://tinyurl.com/7lsdvjj
作者: Sidney0503 (Sidney0503)   2017-04-27 07:23:00
名詞是設計者的問題 template在c++ java不一樣apply bind在c++ js不一樣for each拿到index還是內容物 在py js不一樣不過打架久了大家也漸漸知道 先說是哪家語言的定義如果你覺得煩 那就可以加入語言開發社群或委員出一份力改善這種到處不一樣的狀況
作者: Chikei ( )   2017-04-27 11:25:00
名詞解釋有啥好煩的,難道要吵一架吵完之後才發現兩個人跟本是在講不同的東西只是剛好共用名詞有比較好嗎XDD
作者: CoNsTaR ((const *))   2017-04-27 12:30:00
通常在討論語言特性的時候會用higher-order function用 category 討論程式實作會用 functor 這個詞雖然這兩個詞在 theorical computer science 裡實際上指的是同一個東西,但是在不同情境下我們會用不同的詞來討論另外, functor 還分 contravariant、 convariant 兩種,但 higher-order function 就沒討論這麼多了不過 functor 在很多語言裡已經有自己的意思了,和 TSC裡的定義不同functor 雖然也可以傳入、回傳函數,但是專指這樣的函數會用 higher-order function 來稱呼

Links booklink

Contact Us: admin [ a t ] ucptt.com