函式回撥
C++部分
從C#逆向理解回去,這玩意應該就是delegate
的原型了,只不過C#中將其作為一個單獨的變數型別方便做管理,而C++這個老畢登這裡則是以指標的形式表現出來。
作用在於,你不需要關心函式具體內容是什麼,也不需要關心函式到底會處理什麼,你只需要直接呼叫這個定義了的回撥函式,然後他就會自己幹活。在外部,你再寫出每一個不同處理過程的函式,然後塞給他。也就是說,回撥函式是為了程式的可擴充性而存在的。如果這部分沒看明白,往下看樣例程式碼就知道了
所定義的形式是:void [函式名]( (*[回撥函式名])(引數) )
,舉例:void func( (*pointerFunction)() )
,如果要接受多個引數,那麼必須重新定義新的過載,以下解釋由Bing AI給出:
然而,你需要為每一個接受不同引數的函式定義一個新的 callback 函式。這是因為在 C++ 中,函式的引數數量和型別是函式簽名的一部分,所以接受不同引數的函式會被視為不同的函式。
啥比C++(惱
在OI競賽裡,C++選手總會掏出他閃閃發光的STL,然後驕傲的從裡面拿出一個叫做sort
的函式,而sort
函式的第三個傳參就是一個回撥函式。我們自定義一個bool
返回型別的函式,這樣就可以進行自定義排序規則,想了想,這應該就是平時見的最多的回撥函式了。
高貴C++(笑
以下是回撥函式的一個展示程式碼:
#include<iostream>
using namespace std;
void fst(){
cout<<1<<endl;
}
void sec(){
cout<<2<<endl;
}
void trd(){
cout<<3<<endl;
}
void callback(void(*p)()){
(*p)();
}
int main()
{
callback(fst);
callback(sec);
callback(trd);
return 0;
}
以上程式碼會輸出以下結果:
1
2
3
Unity部分
\(\huge{去用delegate吧。}\)