🙇‍♀️콜백 함수


🪐콜백 함수

#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) // 아이템을 배열로 (곧 포인터), 아이템의 개수, seletor란 콜백함수
{
	for (int i = 0; i < itemCount; i++) // 아이템의 개수만큼 반복
	{
		Item* item = &items[i]; // 각 인덱스에 해당하는 아이템의 주소값을 저장

		if (selector(item)) // selector로 확인 후 리턴
			return item;
	}

	return nullptr;
}

int main()
{
	// 함수 포인터 + 함수 객체 + 템플릿
	// 콜백 (CallBack) : 다시 호출하다? 역으로 호출하다?

	// 어떤 상황이 일어나면 -> 이 기능을 호출해줘
	// 스킬 버튼을 누르면 -> 스킬 함수 호출

	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;
}

태그:

카테고리:

업데이트: