2012-04-07 11 views
0

可能性の重複:
Typedef function pointer?奇妙なtypedefで定義C++

TE0300_Open = (_TE0300_Open)GetProcAddress(hInstLibrary, "TE0300_Open"); 
typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo); 

誰かがコードのこの作品が何を私に説明できますか?私はtypedefが既存のタイプに代替名を割り当てるのに使われていることを知っていますが、私はこのケースを全く理解していません。

+0

[Typedef関数ポインタ?](http://stackoverflow.com/questions/4295432/typedef-function-pointer)と[Typedef with 2 set of bracket?](http://stackoverflow.com/)が重複している可能性があります。質問/ 9515739/typedef-with-bracketの2つ) –

答えて

2

関数ポインタとしてtypedef、_TE0300_Openを宣言しています。

4

typedef int (WINAPI *_TE0300_Open)(unsigned int* PHandle, int CardNo);

この行は、intを返すWINAPI呼び出し規約関数への関数ポインタをtypedefで、かつunsigned int *intを取ります。関数ポインタ型には、別名_TE0300_Openが与えられます。あなたのGetProcAddressコールについては

using func = void (*)(); 

、この負荷を:私も関数ポインタを使用する場合にC++ 11が少ない不快な構文のサポートを追加したと信じて

typedef void (*func)(); 

void foo (func f) //notice we have a nice type name here 
{ 
    cout << "Calling function..."; 
    f(); 
} 

void bar(){} 

int main() 
{ 
    foo (bar); 
} 

は、次の例を考えてみましょうライブラリからの関数。関数ポインターに割り当てると、元の関数と同じようにその関数ポインターを使用できます。

この例では、_TE0300_Openと通常どおりにTE0300_Openを呼び出すことができます。 _TE0300_Openは実装用に予約されている名前であることにも注意してください。

+0

結局のところ、奇妙なことではありませんでした。私は 'typedef'の使い方を完全に理解していませんでした。 – Reginald