1999.4.19 조경민


CRuntime 클래스는 MS에서 RTTI ( Real-Time Type Identificatin)
실시간으로 타입의 정보를 알려주는 기술인데요. ( 읽었던 책으로는
CRuntime으로 한 기술이 RTTI 보다 먼저 했다고 한거 같아요 )
그니까, 실행시간에 객체 자신이 누구인지 어떤 클래스로부터 상속받아
왔는지, 자기 자신에 대한 정보를 갖고 있는거예요..
( 이런 기술을 통해서 보다 나은 객체에 대한 정보를 디버깅시에 알수도
있어서 참 좋은데, 제가 알기로는 이런 실시간 타입 기술은 구현면에선
완전한 오버헤드에 해당한다고 합니다. )

CRuntime 클래스는 다음과 같은 중요한 몇가지가 있어요

  LPCSTR m_lpszClassName 자기 클래스의 이름이예요
  int m_nObjectSize 객체의 바이트 크기수
  CRuntimeClass* m_pBaseClass 기초 클래스를 기억해요

CObject으로 CRuntime클래스를 접근하고 싶으면요
CRuntimeClass* pClass = RUNTIME_CLASS( CObject );
이렇게 하시면 돼요..

그리고 CObject::KindOf를 이용해도 되는데요
그러려면 쓰려는 객체는 CObject으로 부터 상속혹은 상속받은 클래스를
상속해야 하고 DECLARE_DYNAMIC ,IMPLEMENT_DYNAMIC, the DECLARE_DYNCREATE
IMPLEMENT_DYNCREATE, DECLARE_SERIAL and IMPLEMENT_SERIAL 같은 매크로를
이용해야 Runtime 기능을 쓸수 있어요
다음은 MSDN에 있는 설명 코드 예요

// in .H file
class CPerson : public CObject{
    DECLARE_DYNAMIC( CPerson )
public:
    CPerson(){};    // other declaration
  };

  // in .CPP file
  IMPLEMENT_DYNAMIC( CPerson, CObject )

  void SomeFunction(void){
        CObject* pMyObject = new CPerson;
        if(pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) ){
            //if IsKindOf is true, then cast is all right
            CPerson* pmyPerson = (CPerson*) pMyObject ;
            ...
            delete pmyPerson;
            }
            ...
            delete [MyObject];
    }

+ Recent posts