콜백함수 란
프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)[1]는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.
ko.wikipedia.org/wiki/%EC%BD%9C%EB%B0%B1
콜백함수를 이용하여 함수포인터와 횟수를던져주면해당 횟수만큼 함수를 실행하는 콜백함수를 구현해보았다.
설명은 주석으로 대체
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
|
#include <iostream>
using namespace std;
#include <list>
class Event
{
public:
int duration; // 소요 시간
int elapse; // 경과 시간
virtual void Update() = 0;
bool IsDone()
{
return elapse >= duration;
}
};
// 모든 이벤트를 실행시켜줄것이다.
class CallFunc;
class EventManager
{
public:
std::list<Event*> _events; // 모은 이벤트를 저장
public:
void Instance(CallFunc* func) // 이벤트를 넣어줄 함수
{
_events.emplace_back(func);
}
void Update()
{
for (std::list<Event*>::iterator it = _events.begin(); it != _events.end(); )
{
(*it)->Update();
if ((*it)->IsDone()) // 횟수가 지정한 횟수랑같아지면 이벤트를 삭제한다.
{
_events.erase(it++);
}
}
}
};
// 동작하는 이벤트
class CallFunc : public Event
{
public:
void (*_func)(); // 함수포인터를 맴버변수로 가진다.
public:
CallFunc(void (*func)(), int _duration);
virtual void Update() override
{
_func();
elapse += 1;
return;
}
};
CallFunc::CallFunc(void (*func)(), int _duration) {
_func = func; // 매개변수로 넘어온 함수를 저장한다.
duration = _duration; // duration은 0으로 설정한다.
}
void AAA()
{
cout << "Hello World" << endl;
}
void BBB()
{
cout << "Hello View" << endl;
}
void CCC()
{
cout << "Hello Matrix" << endl;
}
int main()
{
EventManager* mgr = new EventManager();
mgr->Instance(new CallFunc(AAA, 3));
mgr->Instance(new CallFunc(BBB, 1));
mgr->Instance(new CallFunc(CCC, 2));
for (int i = 0; i < 100; i++)
{
mgr->Update();
}
return 0;
}
|
cs |
'C++' 카테고리의 다른 글
C++ Dll생성 및 사용 (0) | 2021.01.26 |
---|---|
C++ Static Library ,DLL(Dynamic Linking Library) (0) | 2021.01.23 |
C++ STL(Map) (0) | 2020.10.06 |
C++ STL(알고리즘) (0) | 2020.09.28 |
C++ STL(반복자 iterator) (0) | 2020.09.28 |