3

私は本の中のこのコードととても混乱しています:

typedef int (*healthCalcFunc) (const GameCharacter&)

そして私は、、 はその単語がへのポインタを宣言するために使用できることtypedef double* PDoubleを意味することを理解しています。PDoubledouble

でも意味がわからないtypedef int (*healthCalcFunc) (const GameCharacter&)

これを説明するのを手伝ってくれる人はいますか?

前もって感謝します

:)

4

5 に答える 5

5

このような場合、オペレーターの優先順位が邪魔になる傾向があります。

healthCalcFuncこれにより作成されるのは、 「const GameCharacterへの参照をパラメーターとして受け取り、intを返す関数へのポインター」タイプのエイリアス(名前付き)です。

  1. int:リターンタイプ
  2. (*healthCalcFunc):関数へのポインター-関数への目的のポインターの代わりにポインターを返す関数を宣言する、*前のの代わりに名前にバインドするために、パラメーター内にある必要があります。int
  3. (const GameCharacter &):これが指す関数のタイプのパラメータリスト。
于 2012-06-19T05:38:17.013 に答える
5
typedef int (*healthCalcFunc) (const GameCharacter&);

これは、関数ポインターを記述する型のhealthCalcFuncという名前を導入し、型の1つのパラメーターを取り、をconst GameCharacter&返しますint

つまり、次のような関数がある場合です。

int some_function(const GameCharacter&)
{
    //...
}

次に、上記の関数を次のように指すポインタオブジェクトを作成できます。

healthCalcFunc pfun = some_function;

次に、asの代わりに使用しますpfunsome_function

some_function(args);  /normal call

pfun(args);  //calling using function pointer 
             //it is exactly same as the previous call

このアプローチの利点は、次のように他の関数に渡すpfun(または)ことができることです。some_function

void other_function(healthCalcFunc pfun)
{
    //..
    pfun(args); //invoke the function!
    //..
}

healthCalcFunc pfun = some_function;

other_function(some_function);  
other_function(pfun); 

ここでother_functionは、関数ポインタを使用して関数を呼び出します。そうすれば、次回、関数シグネチャに一致する別の関数を渡すことができ、other_function代わりother_functionにその別の関数を呼び出すことができます。

于 2012-06-19T05:38:47.747 に答える
0

これは関数ポインタです-うまくいけば、あなたの本はこれらをどこかで説明しているでしょう。そうでなければ、あなたのお気に入りの検索エンジンはあなたを正しい方向に向けることができるはずです。

于 2012-06-19T05:37:45.733 に答える
0

intこれは、const GameCharacter&引数として返される関数の関数ポインタのtypedefです。

を使用して関数ポインタを作成し、healthCalcFunc hp = &MyFunc;それをとして使用できますint n = (*hp)(GameCharacter());。ここMyFuncにこの署名があります:int MyFunc(const GameCharecter&);

于 2012-06-19T05:38:13.337 に答える
0

これは関数型の定義です。一見奇妙ですが、慣れます。基本的に、それが言うことは、healthCalcFunc戻り値が整数であるという名前の型を定義し、GameCharacterその唯一の引数として定数参照を取ります。

一般に、関数ポインタ宣言の形式は次のとおりです。

typedef return_type (*new_function_typename)(typeof_arg1, typeof_arg2, ...);

そして、あなたはそれをこのように使うことができます:

new_function_typename functor;
functor = some_other_functions_name;
// or
functor = dlsym(dlopen_handle, "some_function_name"); // for dynamic loading

int retval = functor(arg1, arg2);
于 2012-06-19T05:56:01.220 に答える