[C++] 함수 포인터

강한·2025년 1월 26일

CPP

목록 보기
13/18
post-thumbnail

함수 포인터

  • 함수를 가르키는 포인터
  • 특정 함수의 주소를 저장하여 해당 함수를 호출 할 수 있도록 하는 포인터
void Print()
{
	cout << "Hello" << endl;
}

int Add(int a, int b)
{
	return a + b;
}

int main()
{
	using FuncType = void();
	FuncType* ptr = &Print;
	ptr();
	
	using AddFuncType = int(int, int);
	AddFuncType* aptr = &Add;
	
	int result = aptr(10, 20);
	
	//void(*FuncPtrType)();
	using FuncPtrType2 = void(*)();
	FuncPtrType2 ptr2 = &Print;
	ptr2();
}
using ItemSelectorType = bool(*)(Item* item);

Item* FindItem(Item items[], int itemCount, ItemSelectorType itemSelector)
{
	for (int i = 0; i < itemCount; i++) 
	{
		Item* item = &items[i];
		
		if (item->rarity == 1)
		{
			return item;
		}
		
		if (itemSelector) 
		{
			return item;
		}
	}
	return nullptr;
}

bool IsRare(Item* item)
{
	return item->rarity == 1;
}

int main()
{
	Item items[10];
	items[3].rarity = 1; // Rare
	
	FindItem(items, 10, IsRare);
}

함수 포인터 주요 활용

  • 콜백 함수
    • 함수 포인터를 매개변수로 전달하여 특정 작업을 호출하는 방식
  • 동적 함수 호출
    • 런타임에 호출할 함수를 선택해야 하는 경우 유용하다.
  • 함수 배열
    • 여러 함수를 배열로 관리하며 필요에 따라 선택하여 호출할 수 있다.

콜백 함수

  • 특정 이벤트나 조건이 발생했을 때 호출되도록 설계된 함수

멤버 함수 포인터

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

int main() 
{
	using MemFuncPtrType = void(Test::*)();
	
	MemFuncPtrType funcPtr = &Test::PrintTest;
	
	Test t;
	(t.*funcPtr)();
}

함수 포인터의 단점

  • 시그니처가 안맞으면 사용 불가
  • 상태를 가질 수 없음
profile
의지 강한 게임개발자

0개의 댓글