在腳本語言中,常常遇到回調,但是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就是一個變量,可以對這個變量進行賦值,這樣更貼近我們的習慣。
基本的函數指針就說到這裏,讀完後可以看後邊的函數指針的高級應用