함수 포인터

Crat3 ㅣ 2023. 10. 6. 16:44

1. 함수 포인터

함수의 주소값을 가리키는 포인터.

 

2. 용도

1) 함수를 인자로 받는 함수, 혹은 함수를 리턴하는 함수를 만들 때

2) 콜백 함수를 만들 때

- 특정 조건이 발생(버튼 클릭, 특정 키를 누름)하면 호출되는 함수

 

ex) 인벤토리에서 특정 아이템을 찾을 때

각종 조건(레어도, 레벨, 타입)에 따른 아이템을 찾는 필터를 만드는 상황에서, 인자로 함수 포인터를 받게 만들면 하나의 함수로 여러 조건을 넣어서 쓸 수 있다.

 

 

3. 문법

void Print()
{
	cout << "hello world!" << endl;
}

int main()
{
	// 1. 함수 포인터 지정 *
	using FuncPtrType = void(*)();
	// 2. 함수의 주소를 할당
	FuncPtrType ptr = &Print;
	// 3. 호출
	ptr();
}

* 함수 포인터를 만들 때에는 함수의 타입과 일치하게 작성하여야 한다.

 

4. 멤버 함수 포인터

일반적으로 멤버 함수와 전역 함수는 함수 호출 규약이 달라서 함수 포인터로 멤버 함수를 가리킬 수는 없다.

단, 특수한 문법을 사용하면 가능하다.

class Test
{
public:
	void PrintTest();
};

int main()
{
	using MemFuncPtrType = void(Test::*)();

	MemFuncPtrType funcPtr = &Test::PrintTest;
	
    // 객체 생성*
	Test t;
	(t.*funcPtr)();
}

* PrintTest 함수는 Test 클래스의 객체에 종속적이기 때문에 객체를 생성한 이후에 사용이 가능하다.

'복습' 카테고리의 다른 글

람다 표현식 (Lambda)  (0) 2023.10.11
함수 객체 ( functor ; 펑터 )  (0) 2023.10.06
우선순위 큐 (priority_queue)  (1) 2023.10.05
가위 바위 보  (0) 2023.08.07
산술연산 시 주의점  (0) 2023.08.07