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就是一個變量,可以對這個變量進行賦值,這樣更貼近我們的習慣。

         基本的函數指針就說到這裏,讀完後可以看後邊的函數指針的高級應用

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