在脚本语言中,常常遇到回调,但是C++一般只有底层才会使用回调。新同学可能对其很困惑,现在就记录下自己的理解。
首先,回调必须讲到函数指针,也就是指向某个函数的指针,通常将某个函数指针传给注册的函数,当事件响应的时候就会回调此函数。可能输了也不太明白,看下代码就很清晰了。
#include <iostream>
int (*g_func2)(int a, int b);
int IMTest(int param1, int param2)
{
int ret = param1 + param2;
return ret;
}
int main()
{
g_func2 = IMTest;
int getAdd2 = g_func2(2, 3);
std::cout << getAdd2 << std::endl;
return 1;
}
是的,上边就是对其最简单的应用,C语言基础好的同学,肯定看过上边的用法,输出结果是5。 g_func2是一个全局的函数指针变量,对!我们就是将其看成一个变量,然后在main函数中,将某一个函数指针的赋给他,就可以调用g_func2了。这里只是讲述其基本用法,我们不要惧怕他,将其看成一个普通变量就好了,也可以进行赋值操作。
某些童鞋可能会问,如果直接在g_func2中写好实现,再次赋值会发生什么问题呢?不存在的,g_func2定义的时候,不能进行实现,会报错。
好了,现在简单了解了函数指针,这里在讲述一个高明的用法,C++11的std::functiong这个为我们提供了更好的理解方式。
#include <iostream>
#include <functional>
std::function<int(int a, int b)> g_func1;
int IMTest(int param1, int param2)
{
int ret = param1 + param2;
return ret;
}
int main()
{
g_func1 = IMTest;
int getAdd1 = g_func1(1, 2);
std::cout << getAdd1 << std::endl;
return 1;
}
这里更加清晰,g_func1就是一个变量,可以对这个变量进行赋值,这样更贴近我们的习惯。
基本的函数指针就说到这里,读完后可以看后边的函数指针的高级应用