[C++] 콜백 함수 (Callback function)
콜백 함수 (Callback function)
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
콜백 함수
함수 포인터 + 함수 객체 + 템플릿
콜백 (Callback) : 다시 호출하다? 역으로 호출하다?
게임을 만들 때 이런 콜백의 개념이 자주 등장한다.
ex) MoveTask 실습 등
어떤 상황이 일어나면 -> 이 기능을 호출해줘
ex) UI 스킬 버튼을 누르면 -> 스킬을 쓰는 함수를 호출
콜백 함수의 단점
함수 포인터는 상태를 저장할 수 없다. 함수 포인터로 콜백 함수를 만드는건 간단한 일이지만 상태를 저장할 수 없다는 단점이 있다.
#include <iostream>
using namespace std;
class Item
{
public:
int _itemId = 0;
int _rarity = 0;
int _ownerId = 0;
};
Item* FindItem(Item items[], int itemCount, bool(*func)(const Item*)) // 함수 포인터 형태
{
for (int i = 0; i < itemCount; i++)
{
Item* item = &item[i];
// bool 조건체크
return item;
}
return nullptr;
}
int main()
{
Item items[10];
items[3]._ownerId = 100;
items[9]._rarity = 2;
FindByOwnerId functor1;
functor1._ownerId = 100;
FindByRarity functor2;
functor2._rarity = 1;
Item* item1 = FindItem(items, 10, functor1);
Item* itme2 = FindItem(items, 10, functor2);
return 0;
}
코드
#include <iostream>
using namespace std;
class Item
{
public:
public:
int _itemId = 0;
int _rarity = 0;
int _ownerId = 0;
};
class FindByOwnerId
{
public:
bool operator()(const Item* item)
{
return (item->_ownerId == _ownerId);
}
public:
int _ownerId;
};
class FindByRarity
{
public:
bool operator()(const Item* item)
{
return (item->_rarity >= _rarity);
}
public:
int _rarity;
};
template<typename T>
Item* FindItem(Item items[], int itemCount, T selector)
{
for (int i = 0; i < itemCount; i++)
{
Item* item = &item[i];
if (selector(item))
return item;
}
return nullptr;
}
int main()
{
Item items[10];
items[3]._ownerId = 100;
items[9]._rarity = 2;
FindByOwnerId functor1;
functor1._ownerId = 100;
FindByRarity functor2;
functor2._rarity = 1;
Item* item1 = FindItem(items, 10, functor1);
Item* itme2 = FindItem(items, 10, functor2);
return 0;
}
전체 코드
더보기
#include <iostream>
using namespace std;
// 콜백 (Callback)
class Item
{
public:
public:
int _itemId = 0;
int _rarity = 0;
int _ownerId = 0;
};
class FindByOwnerId
{
public:
bool operator()(const Item* item)
{
return (item->_ownerId == _ownerId);
}
public:
int _ownerId;
};
class FindByRarity
{
public:
bool operator()(const Item* item)
{
return (item->_rarity >= _rarity);
}
public:
int _rarity;
};
template<typename T>
Item* FindItem(Item items[], int itemCount, T selector)
{
for (int i = 0; i < itemCount; i++)
{
Item* item = &item[i];
if (selector(item))
return item;
}
return nullptr;
}
int main()
{
Item items[10];
items[3]._ownerId = 100;
items[9]._rarity = 2;
FindByOwnerId functor1;
functor1._ownerId = 100;
FindByRarity functor2;
functor2._rarity = 1;
Item* item1 = FindItem(items, 10, functor1);
Item* itme2 = FindItem(items, 10, functor2);
return 0;
}
'⭐ Programming > C++' 카테고리의 다른 글
[C++] smart pointer (0) | 2022.04.26 |
---|---|
[C++]L-value와 R-value, R-value reference (0) | 2022.04.24 |
[C++] 템플릿(Template) 2: 클래스 템플릿 (0) | 2022.04.17 |
[C++] 템플릿(Template) 1: 함수 템플릿 (0) | 2022.04.16 |
[C++] 함수 객체 (0) | 2022.04.16 |
댓글
이 글 공유하기
다른 글
-
[C++] smart pointer
[C++] smart pointer
2022.04.26 -
[C++]L-value와 R-value, R-value reference
[C++]L-value와 R-value, R-value reference
2022.04.24 -
[C++] 템플릿(Template) 2: 클래스 템플릿
[C++] 템플릿(Template) 2: 클래스 템플릿
2022.04.17 -
[C++] 템플릿(Template) 1: 함수 템플릿
[C++] 템플릿(Template) 1: 함수 템플릿
2022.04.16