이번 항목은 RTTI 란 무엇인지에 대해서 살펴 본다. 1
RTTI는 무엇인가?
C++ 프로그래밍에선 Run-Time Type Information, or Run-Time Type Identification 약자로 "런타임 형식 정보" 기능을 뜻한다. RTTI 기능을 사용하기 위해선 컴파일러가 이 기능을 지원해야 하며, 비쥬얼 스트디오에선 프로젝트 속성이 "런타임 형식 정보 사용" 을 체크 해야만 한다.
이것은 클래스 및 함수, 기본자료 등 객체라 불리우는 모든 것에 컴파일러가 "아이디"를 부여하여, 기능이 구현되어졌다. 이 "아이디"는 type_info 객체로 구현 되어 졌으며, typeid 연산자를 통해서만, 생성 가능하다. 2 3
어떻게 typeid 를 사용 할수 있는가?
예제 코드
예제코드 분석
라인 38의 type_info 클래스 선언부분을 가져와 보자.
코드를 보면, 기본 생성자는 없고, 복사 생성자와 복사 할당자가 private 영역에 있는 것을 확인 할수 있을 것이다. 이것으로 일개 프로그래머가 type_info 를 사용 할 수 없게 막았다는 것을 알 수 있다.
또한 type_info 의 소멸자가 가상 소멸자로 되어 있는 것을 확인 할수 있을 것이다. 이것으로 typeid 연산자에 의해 생성된 객체는 type_info 클래스를 상속 받아 만들어 진 객체인 것을 확인 할 수 있다.
그래서 일부로 const type_info& 로 할당해 보았다. 부수적으로 typeid 는 const 참조형을 벹어 내기에 const 키워드를 붙여 줘야 한다. 4
그렇다면 이제, 우리에게 제공되어진 public: 인터페이스 각 함수들을 어떻게 사용 하는지 알아 보자.
name(), raw_name() 어떻게 사용 하고 무엇인가?
사용에 앞서 한가지 주의 해야 할 것은
- 상속 관계에서 참조형에 대한 확인이 정확하게 되기 위해선 가상 함수가 꼭 있어야만 한다. 왜냐하면, 가상 테이블에 값이 있다면, 그것을 찾아가서 확인하기 때문이다.
name() 과, raw_name() 은 예제코드를 보면 알 수 있을 것이다. name() 은 우리 사람이 구별하기 위한 명칭을 char* 로 알려 주고 raw_name() 은 컴파일러가 구분하기 위해 사용하는 ID를 char* 로 아려준다.
그렇다면 before() 는 어떻게 사용 하는가?
위 코드에서 일부로 before를 빼었는데, 이것만 따로 예제코드를 제공 하겠다. 이 예제코드는 http://www.tenouk.com/cpluscodesnippet/viewtopic.php?p=382 에서 찾았으며, honeypot 님에 의해 작성되어진 것임을 미리 밝힌다.
코드에서 나와 있듯이, 기본 자료형은 char short int float double 순으로 정의 되어 있다. 출력 결과를 볼수 있듯이 알 수 있을 것이다. 또한 클래스 상속 관계에 따라 B 클래스는 A 클래스를 상속 되었는지를 확인할 수 있을 것이다.
operator== 과 operator!= 는 무엇인가?
type_info 객체의 비교 연산자이며 ==는 같은가? != 같지 않은가? 에 대한 비교를 하여 bool 형으로 반환 해 주는 연산자이다. 알다 시피 == 와 != 등의 연산자 구현시, 일반적인 상황에 맞추는게 제일 좋다.
총평
'연구실 > 파편화된 기록들' 카테고리의 다른 글
MSVC 1개의 솔루션에 다중 프로젝트에 걸렸던 lib 링크 에러 문제 (0) | 2008.12.11 |
---|---|
WSARecv 리턴시, 10014 에러 코드 반환 할 경우.. (0) | 2008.11.09 |
thread alertable state and APC (0) | 2008.10.25 |
어떻게 하면 쓰레드를 객체로 만들 수 있을 까? (0) | 2008.10.23 |
윈도우 도움말 글꼴 크기가 너무 작게 보일 경우 (0) | 2008.10.20 |
윈도우 업데이트 후 재시작 팝업창 뜨는 것을 막는 방법 (8) | 2008.10.17 |
MSVC 2005, 브레이크 포인터가 걸리지 않을 때 (2) | 2008.10.01 |
기초를 등한 시 해도 된다고 순간 잘못 생각 하고 있었다. (1) | 2008.09.28 |
HLSL 기초 문법 1부 - 데이터 타입 (5) | 2008.09.26 |
Microsoft DirectX9 Programmable Graphics Pipeline 예제코드가 컴파일이 안될때.. (2) | 2008.09.23 |
최근댓글