콜백 함수(Callback function)는 다른 함수에 파라미터로 전달되어 특정 시점에 호출되는 함수이다. 흔히 이벤트 처리, 비동기 작업 처리, 사용자 정의 동작 전달 등에 사용된다.
C++에서는 함수 포인터 또는 std::function을 사용하여 콜백을 구현할 수 있다. 객체지향 방식에서 멤버 함수를 람다나 std::bind로 넘기기도 한다.
다음과 같은 콜백 함수가 미리 선언되어 있다고 가정한다.
#include <iostream>
void MyCallback(int result) {
std::cout << "Callback called with result: " << result << std::endl;
}
void DoSomething(int a, int b, void (*callback)(int)) {
int result = a + b;
// 작업이 끝난 후 콜백 호출
callback(result);
}
int main() {
DoSomething(3, 4, MyCallback); // => 7 출력
return 0;
}
std::function을 사용하기 위해 <functional>헤더를 추가해야 한다.
#include <functional>
void DoSomething(int a, int b, std::function<void(int)> callback) {
int result = a + b;
callback(result);
}
int main() {
auto myLambda = [](int r) {
std::cout << "Lambda callback: " << r << std::endl;
};
DoSomething(5, 6, myLambda); // => 11 출력
return 0;
}
#include <functional>
class Worker {
public:
void OnWorkDone(int result) {
std::cout << "Member callback: " << result << std::endl;
}
};
void DoSomething(int a, int b, std::function<void(int)> callback) {
int result = a + b;
callback(result);
}
int main() {
Worker w;
// std::bind 사용
DoSomething(2, 3, std::bind(&Worker::OnWorkDone, &w, std::placeholders::_1));
return 0;
}
#include <functional>
class Worker {
public:
void OnWorkDone(int result) {
std::cout << "Member callback: " << result << std::endl;
}
};
void DoSomething(int a, int b, std::function<void(int)> callback) {
int result = a + b;
callback(result);
}
int main() {
Worker w;
// 람다 사용
DoSomething(7, 8, [&](int r) { w.OnWorkDone(r); });
return 0;
}