본문 바로가기
프로그래밍/c++

콜백함수

by 오늘의논리 2023. 3. 4.
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

'프로그래밍 > c++' 카테고리의 다른 글

vector #2  (0) 2023.03.04
vector #1  (0) 2023.03.04
템플릿 기초  (0) 2023.03.04
함수객체  (0) 2023.03.04
함수 포인터  (0) 2023.03.04

댓글