C++:反射基盤を実現する——コールバック関数
4954 ワード
C++関数ポインタとコールバック関数C++コールバック関数の使用心得
コールバック関数の概念
プログラムを利用してパラメータを通じてその関数の関数ポインタを他の関数に渡し、その関数でこの関数ポインタを呼び出すのはこの関数を呼び出すことに相当し、このような過程をコールバックと呼び、呼び出された関数をコールバック関数と呼ぶ.コールバック関数の本質は関数ポインタ伝達を利用することであり,コールバックメカニズムを理解するには,まず関数ポインタを学習しなければならない.
関数ポインタの概念
関数ポインタとは、関数を指すポインタであり、特定のタイプを指す.関数のタイプは、関数名に関係なく、その戻りタイプとパラメータタイプによって決まります.例:
関数を指すポインタを宣言するには、次のように関数名をポインタに置き換えるだけです.
関数名を1つの値として使用すると、この関数は自動的にポインタに変換されます.たとえば、SpawnProductのアドレスをptrに割り当てます.
typedefを使用して関数ポインタタイプを定義する
例は次のとおりです.
コールバック関数の概念
プログラムを利用してパラメータを通じてその関数の関数ポインタを他の関数に渡し、その関数でこの関数ポインタを呼び出すのはこの関数を呼び出すことに相当し、このような過程をコールバックと呼び、呼び出された関数をコールバック関数と呼ぶ.コールバック関数の本質は関数ポインタ伝達を利用することであり,コールバックメカニズムを理解するには,まず関数ポインタを学習しなければならない.
関数ポインタの概念
関数ポインタとは、関数を指すポインタであり、特定のタイプを指す.関数のタイプは、関数名に関係なく、その戻りタイプとパラメータタイプによって決まります.例:
bool SpawnProduct(const string&);
関数を指すポインタを宣言するには、次のように関数名をポインタに置き換えるだけです.
bool (*ptr) (const string&); // ptr
関数名を1つの値として使用すると、この関数は自動的にポインタに変換されます.たとえば、SpawnProductのアドレスをptrに割り当てます.
ptr = SpawnProduct;
ptr = &SpawnProduct;
typedefを使用して関数ポインタタイプを定義する
typedef bool func(const string&, const string&); //
typedef bool (*ptr) (const string&,const string&); //
例は次のとおりです.
#include
//
typedef bool (*ptr)(const string);
// ( )
bool SpawnProduct(const string name)
{
if (name == "hello")
{
return true;
}
else
return false;
}
int main()
{
ptr p_function = SpawnProduct;
cout<< (*p_function)("h")<<endl;
}