Notice
Recent Posts
Recent Comments
Link
오븐 노트
[C++] 함수 객체 본문
#include <iostream>
using namespace std;
void HelloWorld()
{
cout << "Hello World" << endl;
}
void HelloNumber(int number)
{
cout << "Hello Number " << number << endl;
}
class Knight
{
public:
void AddHp(int addHp)
{
_hp += addHp;
}
private:
int _hp = 100; // Knight의 상태값
};
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;
return true;
}
private:
int _value = 0;
};
class MoveTask
{
public:
void operator()()
{
// TODO
cout << "해당 좌표로 플레이어 이동" << endl;
}
public:
int _playerId;
int _posX;
int _posY;
};
int main()
{
// 함수 객체 (Functor) : 함수처럼 동작하는 객체
// 함수 포인터 선언
void (*pfunc)(void);
// 동작을 넘겨줄 때 유용하다
pfunc = &HelloWorld;
(*pfunc)();
// 함수 포인터 단점
// 1) 시그니처가 안 맞으면 사용할 수 없다.
// 2) 상태를 가질 수 없다
//pfunc = &HelloNumber; // <- 시그니처 안맞음
// 함수 객체란? [함수처럼 동작]하는 객체
// () 연산자 오버로딩
HelloWorld();
Functor functor;
functor();
bool ret = functor(3);
// MMO에서 함수 객체를 사용하는 예시
// 클라 <-> 서버
// 서버 : 클라가 보내준 네트워크 패킷을 받아서 처리
// ex) 클라 : 나 (5, 0) 좌표로 이동시켜줘!
// 커맨드 패턴
MoveTask task; // 일감을 만드는 부분
task._playerId = 100;
task._posX = 5;
task._posY = 0;
// 나중에 여유 될 때 일감을 실행한다
task(); // 실제 실행하는 부분
return 0;
}
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.
모든 글은 제가 공부하기 위해 작성합니다.
'Develop > C++' 카테고리의 다른 글
[C++] 템플릿 기초 #2 (0) | 2023.05.03 |
---|---|
[C++] 템플릿 기초 #1 (0) | 2023.05.03 |
[C++] 함수 포인터 #2 (0) | 2023.05.01 |
[C++] 함수 포인터 #1 (0) | 2023.04.28 |
[C++] 전방선언 (0) | 2023.03.08 |