본문 바로가기
언어/C++

(C++)함수 포인터와 콜백함수

by 흥부와놀자 2020. 7. 13.

함수 역시 메모리의 시작 주소값을 가진다. 그래서 변수처럼 함수의 주소값을 가지는 포인터를 가질 수 있는데 이를 함수포인터 라고한다.

int Function(int a)
{
	printf("%d", a);
	return a;
}
int main()
{
	//함수 포인터 생성
	int(*Fp)(int);
	//포인터에 함수 대입
	Fp = Function;
	//함수 호출
	Fp(10);
	(*Fp)(10);
}

위의 코드와 다르게 함수가 어떤 클래스의 멤버함수인 경우엔 void (FClass::*Fp)(int)처럼 선언한다. 

 

함수포인터를 이용한 콜백 메커니즘

대표적인 콜백함수를 구현하는 방식으로 함수포인터를 넘겨주는 방법이 있다.

//클라1
void Print1(int n)
{
	cout << n << endl;
}
//클라2
void Print2(int n)
{
	cout << n * n << endl;
}
//클라3
void Print3(int n)
{
	cout << "정수 : "<<n << endl;
}

//서버
void For_each(int *begin, int *end, void (*pf)(int))
{
	while (begin!=end)
	{
		pf(*begin++);
	}
}
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	For_each(arr, arr + 5, Print1);
	cout << endl;
	For_each(arr, arr + 5, Print2);
	cout << endl;
	For_each(arr, arr + 5, Print3);
}

 서버는 클라이언트의 함수를 모르더라도 클라이언트의 함수포인터를 넘김으로써 서버가 클라이언트를 호출하는것을 콜백이라고 한다.