C++中回调函数的学习(1)---函数指针

      在脚本语言中,常常遇到回调,但是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就是一个变量,可以对这个变量进行赋值,这样更贴近我们的习惯。

         基本的函数指针就说到这里,读完后可以看后边的函数指针的高级应用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章