2016-10-13 14 views
2

私はいくつかの研究をしましたが、私はちょうどtypedefの周りに私の頭を得ることができません。C++の理解typedef

私はこの例を発見した:

typedef HINSTANCE(*fpLoadLibrary)(char*) 

誰かがそれはそれはへの関数ポインタのためのtypedefだ括弧

+0

@Alexいいえ、ではない良い重複。より良いものを見つけてください。 –

+0

ここでの難しさは、おそらくtypedefよりも関数ポインタと関係があります。 – Galik

+0

概念全体に問題がある場合は、より簡単なtypedefを扱うチュートリアルから始めてください。 – StoryTeller

答えて

3

のようにそれを使用することができます:

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); 

例として、関数ポインタを脇に格納し、同じシグネチャを持つ一連の使用可能な関数から適切な関数を選択すると便利です。

0

の値を持つことが何を意味し、さらにtypedefがここで何をしているかを説明することができ署名付きの関数

HINSTANCE fn (char*); 

となり、名前はfpLoadLibraryとなります。

あなたが宣言を使用してを使用する場合、それは明確だ

fpLoadLibrary fptr = fn; // << from above 
+0

しかし、(* fpLoadLibrary)(char *)がそんなに隣り合っていることを説明できますか? – user3495256

+0

@ user3495256あなたは特に何を理解していませんか? 'fpLoadLibrary'はその場合の' typedef'名です。それは関数の署名を記述し、 '*'はそれへのポインタをつかむことを意味します。 –

+0

@skypjackいいえ、あなたは正しいです。 THXを指摘する。 –

0
typedef HINSTANCE(*fpLoadLibrary)(char*) 

入力としてchar*を取り、HINSTANCEを返す関数へのポインタであるタイプであることがfpLoadLibraryを宣言する。

より簡単に類推typedefintについて

、関数ポインタについて

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*);