void Print() {
cout << "Hello World" << endl;
}
int Add(int a, int b) {
return a + b;
}
Print 함수: 단순히 "Hello World"를 출력합니다.Add 함수: 두 정수를 인자로 받아 합을 반환합니다.typedef 방식:typedef int(*FuncPtrType)(int, int);FuncPtrType은 두 개의 int를 받아 int를 반환하는 함수 포인터의 별칭입니다.using 방식 (C++11 이상):using FuncPtrType = int(*)(int, int);using은 현대적인 방식으로 코드 가독성을 높입니다.FuncPtrType func = &Add;
func 변수는 함수 포인터이며 Add 함수의 주소를 저장합니다.& 연산자를 생략할 수도 있습니다:FuncPtrType func = Add; // 동일int result = func(10, 20); // Add 함수 호출
cout << result; // 출력: 30
Add 함수가 호출됩니다.콜백 함수는 특정 이벤트가 발생할 때 호출되는 함수를 의미하며, 함수 포인터로 구현됩니다.
int DoSomething(int a, int b, FuncPtrType func) {
return func(a, b); // func 호출
}
DoSomething 함수는 두 정수를 인자로 받고, 함수 포인터 func를 통해 계산합니다.int result = DoSomething(10, 20, Add);
cout << result; // 출력: 30
DoSomething은 Add를 함수 포인터로 받아 호출합니다.class Item {
public:
int _itemId = 0;
int _rarity = 0;
int _ownerId = 0;
};
Item은 아이템의 ID, 희귀도, 소유자 ID를 저장하는 클래스입니다.using ItemSelectorType = bool(*)(Item* item);
Item* FindItem(Item items[], int itemCount, ItemSelectorType selector) {
for (int i = 0; i < itemCount; i++) {
if (selector(&items[i])) {
return &items[i];
}
}
return nullptr;
}
ItemSelectorType: Item 포인터를 매개변수로 받아 bool을 반환하는 함수 포인터 타입입니다.FindItem: 배열의 아이템 중 selector 조건을 만족하는 첫 번째 아이템을 찾습니다.bool IsRare(Item* item) {
return item->_rarity == 1; // 희귀도 체크
}
Item items[10];
Item* rareItem = FindItem(items, 10, IsRare);
IsRare 함수는 희귀도가 1인 아이템을 찾는 조건입니다.class Test {
public:
void PrintTest() {
cout << "Test function called" << endl;
}
};
PrintTest는 Test 클래스의 멤버 함수입니다.using MemFuncPtrType = void(Test::*)();
MemFuncPtrType: Test 클래스의 멤버 함수 포인터 타입입니다.void(Test::*)(): Test 클래스 멤버 함수 중 반환형 void이고 인자가 없는 함수 포인터 타입입니다.Test t;
MemFuncPtrType funcPtr = &Test::PrintTest; // 포인터 초기화
(t.*funcPtr)(); // 호출: 객체와 함께 사용
funcPtr: PrintTest 멤버 함수를 가리킵니다..* 연산자로 호출: (t.*funcPtr)()->* 연산자 사용: (t2->*funcPtr)().