私はいくつかの研究をしましたが、私はちょうどtypedef
の周りに私の頭を得ることができません。C++の理解typedef
私はこの例を発見した:
typedef HINSTANCE(*fpLoadLibrary)(char*)
誰かがそれはそれはへの関数ポインタのためのtypedef
だ括弧
私はいくつかの研究をしましたが、私はちょうどtypedef
の周りに私の頭を得ることができません。C++の理解typedef
私はこの例を発見した:
typedef HINSTANCE(*fpLoadLibrary)(char*)
誰かがそれはそれはへの関数ポインタのためのtypedef
だ括弧
のようにそれを使用することができます:
using fpLoadLibrary = HINSTANCE(*)(char*);
実際にはC++ 11 代替typedef
秒(あります標準では-という名前が付けられています。typedef-nameは別名宣言によって導入することもできます)。
ここから分かるように、fpLoadLibrary
は、機能タイプHINSTANCE(char*)
へのタイプポインタのという別名です。
カッコ内の型は、関数型のパラメータの予想される型だけです。
スニペットのtypedef
は、(自分の意見)を読むのが難しい場合でも、まったく同じことを意味します。
HINSTANCE f(char*) {}
導入の上にあなたはそれが次のようにタイプを使用することができます:
fpLoadLibrary fp = &f;
を次にあなたがfp
てもf
を呼び出すことができます
は今、あなたはこのような関数があるとしとして:
fp(my_char_ptr);
例として、関数ポインタを脇に格納し、同じシグネチャを持つ一連の使用可能な関数から適切な関数を選択すると便利です。
の値を持つことが何を意味し、さらにtypedef
がここで何をしているかを説明することができ署名付きの関数
HINSTANCE fn (char*);
となり、名前はfpLoadLibrary
となります。
あなたが宣言を使用してを使用する場合、それは明確だ
fpLoadLibrary fptr = fn; // << from above
しかし、(* fpLoadLibrary)(char *)がそんなに隣り合っていることを説明できますか? – user3495256
@ user3495256あなたは特に何を理解していませんか? 'fpLoadLibrary'はその場合の' typedef'名です。それは関数の署名を記述し、 '*'はそれへのポインタをつかむことを意味します。 –
@skypjackいいえ、あなたは正しいです。 THXを指摘する。 –
typedef HINSTANCE(*fpLoadLibrary)(char*)
入力としてchar*
を取り、HINSTANCE
を返す関数へのポインタであるタイプであることがfpLoadLibrary
を宣言する。
より簡単に類推typedef
。int
について
、関数ポインタについて
int ip; // Declares a variable.
typedef int aType; // Declares type. aType is an alias for int
、
// Declares a variable.
// ftpr is a pointer to a function that takes char*
// as argument and returns a HINSTANCE.
HINSTANCE (*fptr)(char*);
// Declares a type.
// fpLoadLibrary is an alias for the type "pointer to function that takes
// a char* as argument and returns a HINSTANCE.
typedef HINSTANCE (*fpLoadLibrary)(char*);
@Alexいいえ、ではない良い重複。より良いものを見つけてください。 –
ここでの難しさは、おそらくtypedefよりも関数ポインタと関係があります。 – Galik
概念全体に問題がある場合は、より簡単なtypedefを扱うチュートリアルから始めてください。 – StoryTeller