0. 함수 포인터의 단점
(1) 함수의 시그니쳐가 같아야 함
void HelloWorld()
{
cout << "Hello Worldd" << endl;
}
void (*pfunc)(void);
pfunc = &HelloWorld();
(*pfunc)();
(2) 상태를 가질 수 없음
(3) 문법의 복잡성
1. 함수 객체(Functor)
함수처럼 동작하는 객체.
class Functor
{
public:
void operator()() // () 연산자 오버로딩
{
cout << "Functor Test" << endl;
cout << _value << endl;
}
private:
int _value = 0;
};
int main()
{
Functor functor;
functor();
}
함수 포인터와는 다르게 상태 값을 가질 수 있고 호출 또한 가능하다.
또한 함수처럼 오버로딩이 가능하다.
class Functor
{
public:
void operator()() // () 연산자 오버로딩
{
cout << "Functor Test" << endl;
cout << _value << endl;
}
bool operator()(int num) // 함수 오버로딩
{
cout << "Functor Test" << endl;
_value += num;
cout << _value << endl;
}
private:
int _value = 0;
};
int main()
{
Functor functor;
functor();
bool ret = functor(3);
}
2. 응용
ex) 플레이어가 움직이는 것을 구현하기
class MoveTask
{
public:
public:
int _posX;
int _posY;
int _playerId;
};
int main()
{
Functor functor;
functor();
bool ret = functor(3);
MoveTask task;
task._playerId = 100;
task._posX = 5;
task._posY = 0;
}
'기초 C++ 스터디 > 객체지향' 카테고리의 다른 글
8-5. 템플릿 기초(2) - 클래스 템플릿 (0) | 2023.06.08 |
---|---|
8-4. 템플릿 기초(1) (0) | 2023.06.08 |
8-2. 함수 포인터(2) (0) | 2023.06.08 |
8-1. 함수 포인터(1) (0) | 2023.06.08 |
6-7. 전방 선언 vs 포함(#include) (0) | 2023.06.05 |