GEMS 5권 템플릿을 이용한 C++ 반영 기능 구현
사용자 친화적 반영 시스템을 만드는데 필요한 요구사항
효율성 : 제한된 메모리를 가진 콘솔 게임기에서도 잘 돌아가야한다.
크로스 플랫폼 :
투명성 : 프로그래머가 자신의 코딩 방식을 바꾸지 않고도 반영 기능을 사용할 수 있어야 한다.
프로그래머의 코드와 연결시키는 책임은 프로그래머가 아니라 시스템이 져야한다.
컴파일에 영향을 주지 말아야 한다. :
유연성 : 프로그래머는 클래스 인터페이스에서 외부에 노출될 부분을 구체적으로 제어할 수 있어야한다.
(종종 클래스 전체가 아니라 클래스의 제한된 기능만을 노출하고 싶을 때가 있기 때문이다.
견고함 : 시스템은 형식에 안전해야 하며 흔한 실수도 모두 잡아낼 수 있어야 한다.
(템플릿 사용의 좋은 근거)
반영 시스템의 3가지 부분
등록 : 프로그래머가 클래스의 어떤 자료 멤버들을 외부세계에 노출할 것인지 명시하는 것
조사 : 클래스가 지원하는 속성과 메서드 이름, 그리고 그 형식을 프로그래머가 조사할 수 있게 한다.
조작 : 외부 인터페이스(스크립트, GUI, 파일 등)로부터 프로그래머의 코드를 호출할 수 있게 한다.
1부 : 실행시점 형식 정보
이 RTTI에 쓰이는 형식 자료구조
* 클래스 이름 - 하나의 문자열에 저장되는, 꾸미지 않은 클래스 이름이다.
* 클래스를 식별하는 고유한 클래스 ID - 사용자가 제공한, 고유한 32비트 정수. 클래스 형식을 빠르게 비교하는데에나 파일이나 네트웍으로 클래식 형식 정보를 직렬화하는 데에는 숫자가 더 좋다.
* 조상의 RTTI 정보를 가리키는 포인터 - 조상 RTTI에 대한 포인터는 이름 그대로이다.
* 팩토리 함수에 대한 함수 콜백 - 이 클래스 형식의 새 객체 인스턴스를 생성하는 팩토리 함수를 가리킨다. 실행시점에서 다른 것은 전혀 모르고 클래스 ID만 알고 있는 상황에서 객체를 생성할 때 매우 유용하다.