더북(TheBook)

여기서는 우선 길이부터 기록한 다음 vector의 각 원소를 하나씩 임베딩하며 기록해 나간다. 이렇게 하면 벡터의 벡터, 또는 벡터를 포함한 클래스의 벡터 등 복잡한 형태도 지원할 수 있다. 마찬가지로, 직렬화된 것을 복원하려면 다음과 같이 Read 함수를 구현한다.

template<typename T>
void Read(std::vector<T>& outVector)
{
    size_t elementCount;
    Read(elementCount);
    outVector.resize(elementCount);
    for (T& element : outVector)
    {
        Read(element);
    }
}

특수화된 Read()Write()를 더 추가하면 더욱 다양한 형태의 컨테이너, 또는 포인터로 참조된 데이터를 지원할 수 있다. 단 이 같은 방식은 원조 객체에 전적으로 포함되는, 즉 다른 객체와 공유되지 않는 데이터에 한해서만 적용할 수 있는 직렬화 기법이다. 데이터가 다른 객체와 공유되거나 포인터로 참조된다면 아래에 다룰 링킹이라는 더 복잡한 기법을 사용해야 한다.

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