2012-04-07 4 views
0

가능한 중복 :
Typedef function pointer?이상한 형식 정의 정의 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?] (http://stackoverflow.com/)의 가능한 복제본 질문/9515739/typedef-with-two-bracket-of-bracket) –

답변

2

함수 포인터에 대해 typedef, _TE0300_Open을 선언하고 있습니다.

4

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

이 줄은 int를 반환하고 unsigned int *int을 복용 WINAPI 호출 규칙 함수에 함수 포인터를 typedef가. 함수 포인터 유형에는 별칭 _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