[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.26Smart Pointer 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! Dangling Pointer 더보기 #include using namespace std; #include #include #include #include #include #include class Knight { public: Knight() { cout -
[C++]L-value와 R-value, R-value reference
[C++]L-value와 R-value, R-value reference
2022.04.24L-value vs. R-value 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! L value L value : 단일식을 넘어서 계속 지속되는 개체 메모리 위치를 참조. 주소가 있는 애들. 대개 식별자. const가 붙으면 수정할 수 없는 l-value가 된다. R value R value : L value가 아닌 나머지 (임시 값, 열거형, 람다, i++ 등) 표현식 종료 후 없어지는임시적인 값 리터럴 임시변수 임시객체. const 로 L value를 R value로 바꿀 수 있다. L value Reference vs. R valu… -
[C++] 템플릿(Template) 2: 클래스 템플릿
[C++] 템플릿(Template) 2: 클래스 템플릿
2022.04.17클래스 템플릿 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 클래스 템플릿 #include using namespace std; class RandomBox{ public: int GetRandomData() { int idx = rand() % 10; return _data[idx]; } public: int _data[10]; }; int main(){ srand(static_cast(time(nullptr))); RandomBox rb1; for (int i = 0; i < 10; i++) { rb1._data[i] = i; } i… -
[C++] 템플릿(Template) 1: 함수 템플릿
[C++] 템플릿(Template) 1: 함수 템플릿
2022.04.16템플릿 기초 1 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 템플릿이란? 템플릿 : 함수나 클래스를 찍어내는 틀 템플릿 종류 함수 템플릿 클래스 템플릿 함수 템플릿 기초 #include using namespace std; template void Print(T a) { cout
댓글을 사용할 수 없습니다.