Server/C++

TypeCase

Juzdalua 2024. 8. 6. 00:30

객체를 다룰 때, 기능을 명시한 최상위 클래스로 관리하는 것이 편의성에 용이하다.

enum PLAYER_TYPE
{
	KNIGHT,
	MAGE
};

class Player {
public:
	virtual ~Player() {}

	int _type;
};

class Knight : public Player {
public:
	Knight() { _type = KNIGHT; cout << "생성자" << endl; }
	~Knight() { cout << "소멸자" << endl; }

	int32 _hp = 100;
};

class Mage : public Player {
public:
	Mage() { _type = MAGE; }
};

void AttackPlayer(Player* player)
{

}

int main()
{
	Player* p1 = new Knight();
	Player* p2 = new Mage();
}

 

하지만 이런 경우에서도 하위 클래스로 캐스팅이 필요한 경우가 존재한다.

Knight* k1 = dynamic_cast<Knight*>(p1);

if (p1->_type == KNIGHT)
{
    //Knight* k1 = (Knight*)p1;
    Knight* k1 = static_cast<Knight*>(p1);
}

캐스팅하는 클래스의 구조가 다르다거나 멤버변수가 맞지 않다면 에러가 발생한다.

dynamic_cast의 경우에는 해당 조건에서 NULL을 반환하지만, static_cast에 비해 성능이 많이 떨어진다.

 

커스텀 코드)

https://github.com/Juzdalua/Study-Cpp-Server/blob/master/ServerCore/TypeCast.h

 

Study-Cpp-Server/ServerCore/TypeCast.h at master · Juzdalua/Study-Cpp-Server

Study C++ IOCP. Contribute to Juzdalua/Study-Cpp-Server development by creating an account on GitHub.

github.com

 

 

'Server > C++' 카테고리의 다른 글

TCP vs UDP  (0) 2024.08.06
TCP 소켓 프로그래밍  (0) 2024.08.06
메모리 풀링  (0) 2024.08.05
STL Allocator  (0) 2024.08.05
메모리 오염과 Stomp Allocator  (0) 2024.08.05