函数的注册与回调【经验】

函数的注册与回调【经验】

刚工作不久,就遇到了让大多数程序员新人头疼的函数注册与回调问题。因此,特意记录一遍博文。既是问题解决经验的总结,也是分享。

  • 1.何为函数的注册与回调
  • 2.如何实现函数的注册与回调

1.借鉴一位仁兄对函数注册与回调的形象解释,可对该问题形容为:该过程最重要的函数有两个,注册函数与回调
函数。两个函数位于两个不同的模块或是类中,实现回调函数的一方就像学生,实现注册函数的一方则像老师。这是
一个学生向老师讨教,而老师不能立即给予回答的事件。于是学生留给老师自己的一个电话号码,当老师有时间或是
想出答案之后则会给予该学生问题的答复。回调往往是起到一个模块(类)用来向另一个模块(类)所要信息的作用。
只要理解了这一点,就能清晰的理解整个函数注册与回调的逻辑。


2.对于回调函数,最好将其定义为类内静态函数或是全局函数。但就c++语言面向对象的特性,建议定义为静态函数。

A.h
class A
{
public:
  A();
  ~A();
public:
  int funcCompleteRegister(B *handle);
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C语言函数注册回调函数是一种常用的编程技巧,它可以让我们在程序运行过程中动态地调用其他函数,以实现更加灵活的功能。下面我将详细介绍这两个概念。 1. 函数注册 函数注册是指将一个函数与一个特定的事件相关联,使得当该事件发生时,该函数会被自动调用。在C语言中,我们可以使用函数指针来实现函数注册。 例如,我们可以定义一个函数指针类型: ``` typedef void (*EventHandler)(int); ``` 该类型表示一个带有一个整型参数的无返回值函数指针。然后,我们可以定义一个函数注册表,将不同的函数指针与不同的事件相关联: ``` EventHandler event_handlers[10]; ``` 在程序运行过程中,当某个事件发生时,我们可以根据事件的编号来查找对应的函数指针,并调用它: ``` void trigger_event(int event_id, int data) { if (event_id >= 0 && event_id < 10 && event_handlers[event_id]) { event_handlers[event_id](data); } } ``` 这样,我们就可以在程序运行过程中动态地注册和调用不同的函数了。 2. 回调函数 回调函数是指一个被其他函数调用的函数,它通常被用来实现某种特定的功能,例如处理数据、计算结果等。回调函数通常被用作函数指针的参数,以实现更加灵活的功能。 例如,我们可以定义一个函数,它接受一个整型数组和一个回调函数作为参数,对数组中的每个元素调用回调函数,并将结果保存在一个新的数组中: ``` void map(int* input, int* output, int length, int (*callback)(int)) { for (int i = 0; i < length; i++) { output[i] = callback(input[i]); } } ``` 在调用该函数时,我们可以传入不同的回调函数,以实现不同的功能: ``` int square(int x) { return x * x; } int increment(int x) { return x + 1; } int main() { int input[] = {1, 2, 3, 4, 5}; int output[5]; map(input, output, 5, square); // output: {1, 4, 9, 16, 25} map(input, output, 5, increment); // output: {2, 3, 4, 5, 6} return 0; } ``` 这样,我们就可以在程序运行过程中动态地调用不同的函数来实现不同的功能了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值