作者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/cn.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