참고)
MFC/CObject
DECLARE_SERIAL()매크로를 통해서 직렬화 기능의 추가가 가능하다. 내부적으로 new, delete 를 사용하는데, 매모리 릭을 추적하는 코드가 들어가므로 특별히 프로그래머가 신경써야 하는 부분은 없다.
매크로는 클래스의 이름을 인수로 받는다. 따라서 만약
CExample 에 직렬화 기능을 추가한다면
CExample 의 정의부의 내부 어느 곳에서나
~cpp DECLARE_SERIAL{CExample) //매크로 이므로 ;를 붙여선 안된다.
를 추가하면 된다. (Class Wizard 가 관리하는 부분에 삽입하는 것은 제외 ㅡ.ㅡ;;)
구현 파일에 넣어야할 IMPLEMENT_SERIAL()는 3가지의 인수를 취한다. 첫번재는 이름, 두번재는 바로 윗 단계의 기본 클래스, 프로그램에 대한 스키마 번호(scheme number), 혹은 버전을 나타내는 부호 없는 32비트 정수를 인자로 받는다.
3번째 인자는 다른 버전의 프로그램으로 읽었을 때 발생하는 문제를 막아준다.
~cpp IMPLEMENT_SERIAL(CExample, CObject, 1)
이후에 클래스 정의를 수정한다면 스키마 번호를 바꾸어야 한다. (다른 버전의 파일을 읽으려 하면 예외를 발생시킨다.
만약
CExampleDerived 가
CExample의 자식 클래스인데 이 클래스를 직렬화 하기위해서는 모든 중간 단계의 클래스 수준에서 직렬화가 구현되어야 한다.