728x90
함수 포인터 + 함수 객체 + 템플릿
콜백(Callback) : 다시 호출하다? 역으로 호출하다?
게임을 만들 때 이런 콜백의 개념이 자주 등장한다
어떤 상황이 일어나면 -> 이 기능을 호출해줘
ex) UI 스킬 버튼을 누르면-> 스킬을 쓰는 함수를 호출
만약 아이템을 사용자아이디 또는 레어리티에 따라 찾는 함수를 만든다고 했을때
class Item
{
public:
public:
int _itmeId = 0;
int _rarity = 0;
int _ownerId = 0;
};
class FindByOwnerId
{
public:
bool operator()(const Item* item)
{
item->_ownerId == _ownerId;
}
public:
int _ownerId;
};
class FindByRarity
{
public:
bool operator()(const Item* item)
{
item->_rarity == _rarity;
}
public:
int _rarity;
};
template<typename T> // FindByRarity와 FindByOwnerId를 둘다 넣을수 있게
Item* FindItem(Item items[], int itemCount, T selector)
{
for (int i = 0; i < itemCount; i++)
{
Item* item = &items[i];
if(selector(item))
return item;
}
return nullptr;
}
int main()
{
Item items[10];
items[3]._ownerId = 100;
items[8]._rarity = 2;
FindByOwnerId functor1;
functor1._ownerId = 100;
FindByRarity functor2;
functor2._rarity = 1;
Item* item1 = FindItem(items, 10, functor1);
Item* item2 = FindItem(items, 10, functor2);
return 0;
}
이렇게 만들 수 있다
728x90
댓글