2012-10-27 4 views

답변

1

qsort에 제공된 비교 함수와 같이 프로그램 흐름에 따라 변경 될 수있는 핸들러 함수를 저장하는 데 사용할 수 있습니다.

void (*my_handler)(int); 

void set_handler(void(*fn)(int)) { 
    my_handler = fn; 
} 

void do_stuff() { 
    // ... 
    my_handler(x); // using a custom handler 
} 

if (something) { 
    set_handler(my_function_1); 
} 
else set_handler(my_function_2);  

do_stuff(); 
0

당신은 정렬 알고리즘을위한 compairer를 주입 할 수 있습니다. 따라서 일부 로직을 외부에서 제외 할 수 있습니다.

또는 일부 이벤트 처리를 위해이 메서드를 사용하여 콜백을 구현할 수 있습니다.

0

콜백에는 일반적으로 함수 포인터가 사용됩니다. 예를 들어, 일부 무거운 작업을 수행 비동기 기능을 상상하고는 완료되면 통지 할 : 당신이 그 함수를 호출 할 때 즉시 반환, 그래서 그것의 자신의 스레드에서 실행

void doWork(void (*foo)(int)); 

. 완료 시점을 어떻게 알 수 있습니까? 당신은 당신이 일을 끝낼 때 사용자가 제공하는 함수를 호출하도록 지시 :

void myFoo(int n); 

doWork()에 있다고 통과 :

doWork(myFoo); 

지금 doWork() 완료, 그것은 myFoo()를 호출 할 때.

이것은 콜백의 한 가지 용도 일 뿐이지 만 가장 일반적인 것입니다.

관련 문제