더북(TheBook)

4.3 참조된 데이터 처리

 

지금까지의 작업으로 직렬화 코드가 이제 모든 종류의 원시 자료형과 POD7 자료형을 처리할 수 있게 되었지만, 아직 포인터나 컨테이너 등 간접 참조 데이터는 처리하지 못한다. RoboCat 클래스를 다음 코드로 다시 살펴보자.

class RoboCat : public GameObject
{
public:
    RoboCat() : mHealth(10), mMeowCount(3), mHomeBase(0)
    {
        mName[0] = '\0';
    }
    
    virtual void Update();
    
    void Write(OutputMemoryStream& inStream) const;
    void Read(InputMemoryStream& inStream);

private:
    int32_t              mHealth;
    int32_t              mMeowCount;
    GameObject*          mHomeBase;
    char                 mName[128];
    std::vector<int32_t> mMiceIndices;
    
    Vector3              mPosition;
    Quaternion           mRotation;
};

현재 버전의 메모리 스트림 구현으로 아직 직렬화할 수 없는 복합 멤버 변수가 두 개 있는데, mHomeBasemMiceIndices가 그것이다. 이를 처리하기 위해서는 다음 절에서 논의할 다른 접근 방법이 필요하다.

 


 

7  역주 POD: plain old data. 순수하게 원시 자료형과 다른 POD로만 구성된 자료형. 멤버 함수가 있어도 상관없으나 포인터나 가상 함수가 있어선 안 된다. stl vector나 string은 POD가 아니므로 이런 것들이 포함되어선 안 된다. 예를 들면 Vector3 같이 주로 값만 담고 있는 자료형을 POD로 분류할 수 있겠다. POD 메모리 레이아웃이 단순하므로 쉽게 복사할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.