よく使いそうなのを列挙すると
- 抽象クラスか
- ベースクラスのポインタを使ってシリアライズ可能にするか
- オブジェクト追跡を行うか
- クラスのバージョン番号
抽象クラス
抽象クラスの場合、コンパイルエラーになることがある。
MFCでも IMPLEMENT_SERIAL マクロが抽象クラスに使えなくて、
抽象クラスには専用のマクロを使う必要があったりしたが、boostでも
同様に BOOST_IS_ABSTRACTマクロを使う必要がある。
BOOST_IS_ABSTRACT(MyClass); // MyClass は抽象クラス
ベースクラスのポインタを使ってシリアライズ可能
以前に、ベースクラスのポインタを使って派生クラスのシリアライズを可能にするために、シリアライズ前に register_type()を呼び出してクラスを登録しておく必要があると書いたが、あれは結構面倒。
かわりにBOOST_CLASS_EXPORT_GUIDマクロを使って特性を指定することでそれを省くことができ、とっても便利だ。
BOOST_CLASS_EXPORTマクロを使うとユニークな文字列をクラス名にしてくれる。BOOST_CLASS_EXPORT_GUID(MyClass, "ユニークな文字列");
BOOST_CLASS_EXPORT(MyClass); // BOOST_CLASS_EXPORT_GUID(MyClass, "MyClass"); と同値
オブジェクト追跡
あるオブジェクトが2つのオブジェクトからポインタで関連付けられたりしている場合に、2重にシリアライズされてしまうのを防ぐために MFCでは
ハッシュマップに シリアライズ済みのオブジェクトのポインタを登録しておき、すでにシリアライズ済みのオブジェクトだったらかわりにそれをあらわすIDを書き出すという処理を行っていた。
また、循環参照の場合にもこの処理を行わないと無限ループに陥ってしまう。
boostでも同様の処理を行っていて、これをオブジェクト追跡と呼んでいるみたいで、この動作を指定できる。
3つのモードがあって、
BOOST_CLASS_TRACKING(MyClass, boost::serialization::track_always);
バージョン管理
クラスのメンバが変更したときなどのために、シリアライズ時にはクラスのバージョン番号が書き込まれ、serialize()メンバ関数の第2引数にその番号が渡されてくる。
この番号をみて処理を振り分けることで異なるバージョン間での互換性を保つことができる。
バージョン番号は BOOST_CLASS_VERSIONマクロで次のように指定する。
BOOST_CLASS_VERSION(MyClass, 3); // version = 3
<< serialization - XML archive Site Top serialization - デフォルトコンストラクタのないクラス >>
Comments
ロレックス、オメガ、パネライ、カルティエ、
ウブロなど世界中のブランドコピー時計
アイテムをお値打ち価格と安心のサービスでお届けします。
ルイ ヴィトン キーケース gucci https://www.tentenok.com/products-small-l-28-p-5.html
ブランドコピーブランドメンズレディースファッション時計バッグ財布を海外通販!
ブランドコピーブランド激安ショッピングサイトです。
送料無料(日本全国)!
サポート体制も万全です。スタイルが豊富で。
最新作も随時入荷いたしております。
ご安心購入くださいませ。
ロレックス 文字盤 花柄 3点セット http://www.sbagshop.com/Super-Copy-6694.html
ルイ・ヴィトン | エルメス | グッチ |
プラダ| セリーヌ | ゴヤール|エルメス特集 | ブランド館(拜?)
ルイ・ヴィトン | エルメス | ゴヤール|ジュエリー・アクセサリー | 靴
主要取扱商品 バッグ、財布、腕時計、靴、装飾品、小物等!
プロのブランドコピーの専門家,スーパーコピーの先駆者、国内で最高に成熟したブランドコピー専門店。
スイスのチップ適用、実物写真、実物が写真および描写と一致、公式サイトの外観、規格、機能と一致。
3210.50 スーパーコピー https://www.bagb78.com/goods-2144.html
商品の到着も早く、品物もイメージ通りでした。
割安に買えて良かったと思っていますが、贈り物用の梱包があったらなお良いと思います。
妻も多分喜んでくれると思います。誕生日が楽しみです。
ありがとうございました。
時計 スーパーコピー ムーブメント 3135 https://www.jpw128.com/product/detail-5762.html
シャネルが発表しているニュートラベルラインは、素材にナイロンを採用したカジュアルさが持ち味。
美しいカラーバリエーションやデザインで気軽に使えるバッグを始め、シンプルなバッグまで幅広く作られています。
オメガ ff https://www.etanoob.com/product/4509.htm