GPG 5권에 나오는 내용으로 런타임 상에서 해당 오브젝트의 타입 정보를 알아낼수 있는 기능입니다.
제가 사용한 용도로는 객체 리스트를 들고 있는데, 이 객체들이 하나는 로직컬 객체고 다른 하나는 렌더러블 객체라 할 때, 이 둘을 분류 하기 위해서 어느 방법이 좋을까 고심하다 (물론 다른 방법도 많겠지만 ) RTTI를 적용해보기로 했습니다.
제가 사용하는 대략적인 소스 코드입니다.
CRTTI.h
CObject.h
CRTTI 정적 멤버 변수로 클래스 타입 고유의 ID 역할을 합니다. 이 멤버 변수가 같다면, 같은 클래스 타입이라 할 수 있습니다. IsClassOf 함수에서는 해당 객체가 해당 클래스인지 판별을 하고, IsKindOf 함수에서는 해당 객체의 부모 클래스 타입을 검색해 어느 클래스로 부터 파생 되었는 지를 판별할 수 있습니다.
제가 사용한 용도로는 객체 리스트를 들고 있는데, 이 객체들이 하나는 로직컬 객체고 다른 하나는 렌더러블 객체라 할 때, 이 둘을 분류 하기 위해서 어느 방법이 좋을까 고심하다 (물론 다른 방법도 많겠지만 ) RTTI를 적용해보기로 했습니다.
제가 사용하는 대략적인 소스 코드입니다.
CRTTI.h
class CRTTI | |
{ | |
public: | |
CRTTI( const tstring strClassName, const CRTTI* pBaseRTTI ); | |
inline const tstring& GetClassName() const; | |
inline const CRTTI* GetBaseRTTI() const; | |
protected: | |
const tstring m_strClassName; | |
const CRTTI* m_pBaseRTTI; | |
}; |
CObject.h
class CObject | |
{ | |
public: | |
CObject();; | |
virtual ~CObject(); | |
public: | |
virtual const CRTTI* GetRTTI() const; | |
public: | |
static bool IsClassOf( const CRTTI* pRTTI, const CObject* pObject ); | |
bool IsClassOf( const CRTTI* pRTTI ) const; | |
static bool IsKindOf( const CRTTI* pRTTI, const CObject* pObject ); | |
bool IsKindOf( const CRTTI* pRTTI ) const; | |
public: | |
static const ev_CRTTI ms_RTTI; | |
const boost::flyweight | |
}; | |
CRTTI 정적 멤버 변수로 클래스 타입 고유의 ID 역할을 합니다. 이 멤버 변수가 같다면, 같은 클래스 타입이라 할 수 있습니다. IsClassOf 함수에서는 해당 객체가 해당 클래스인지 판별을 하고, IsKindOf 함수에서는 해당 객체의 부모 클래스 타입을 검색해 어느 클래스로 부터 파생 되었는 지를 판별할 수 있습니다.