回调函数的应用误区2(与原理相悖的回调函数)
研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法。我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽。
下面的代码可以在Vs2008下编译并运行:
个人观点:
以下代码虽说是按照C/S,调用者/被调者的思路去设计回调函数的,但实际上整个代码里面缺少最关键一环:没有出现被调函数(即用回调函数做参数的函数),所以不符合回调函数的基本原理。
就把它当成c/s模式下的函数指针调用吧,或者不伦不类的函数指针调用,没有理解到回调函数的真正含义,这个误区你犯过了没?。
################dll.h################
#pragma once
typedef void (* CALLBACK)(int var);
extern CALLBACK g_pfunc;
extern void dll_register_callback();
################dll.cpp################
#include <stdio.h>
#include "dll.h"
CALLBACK g_pfunc = NULL;
//回调函数定义
void CallBackFunc(int var)
{
printf("[CallBackFunc]: data=%d\n", var);
}
//回调函数注册
void dll_register_callback()
{
g_pfunc = CallBackFunc;
}
################app.cpp################
#include <stdio.h>
#include "dll.h"
int main()
{
//register CALLBACK
dll_register_callback();
//run CALLBACK
(*g_pfunc)(20);
return 0;
}