ここでは"serialization"という言葉を、任意のC++のデータ構造を、元に戻せる形でバイト列に分解するという意味で用います。こういった仕組みは、プログラムの他の場所で等価な構造を再構成するのに利用できます。
状況に応じて、serializationはオブジェクトの永続化や、リモート環境への引数受け渡し、その他の仕組みの実装に利用されるかもしれません。このserializationシステムでは、バイト列の特定の種類の表現を示す言葉として、archiveという言葉を用います。archiveには、バイナリデータ、テキストデータ、XML、その他ユーザ定義のarchiveなどが存在します。
このシステムのゴール
- コードの移植性 - ANSI C++ にのみ依存する。
- コードの経済性 - コードを短く、シンプルにするために適切であるような箇所で、RTTI、テンプレート、多重継承などのC++機能を利用する。
- それぞれのクラス定義のための独立したバージョニング。これは、クラス定義を変更した際、古いファイルを新しいクラスにインポートすることを可能とする。
- 深いポインタの保存と復元。これは、ポインタそのものの保存と復元に加え、ポインタが指す先の保存と復元を意味する。
- ポインタで共有されるデータの適切な復元。
- STLコンテナや他のよく使われるテンプレートの保存と復元。
- データの可搬性 - あるプラットフォームで作られたバイト列は、他のプラットフォームで読めるべきである。