serialization - traits

シリアライズするクラスの特性の指定ができる。
よく使いそうなのを列挙すると
  • 抽象クラスか
  • ベースクラスのポインタを使ってシリアライズ可能にするか
  • オブジェクト追跡を行うか
  • クラスのバージョン番号
ぐらいかな。それぞれ見ていく。

抽象クラス
抽象クラスの場合、コンパイルエラーになることがある。
MFCでも IMPLEMENT_SERIAL マクロが抽象クラスに使えなくて、 抽象クラスには専用のマクロを使う必要があったりしたが、boostでも 同様に BOOST_IS_ABSTRACTマクロを使う必要がある。

BOOST_IS_ABSTRACT(MyClass); // MyClass は抽象クラス


ベースクラスのポインタを使ってシリアライズ可能
以前に、ベースクラスのポインタを使って派生クラスのシリアライズを可能にするために、シリアライズ前に register_type()を呼び出してクラスを登録しておく必要があると書いたが、あれは結構面倒。
かわりにBOOST_CLASS_EXPORT_GUIDマクロを使って特性を指定することでそれを省くことができ、とっても便利だ。

BOOST_CLASS_EXPORT_GUID(MyClass, "ユニークな文字列");
BOOST_CLASS_EXPORTマクロを使うとユニークな文字列をクラス名にしてくれる。
BOOST_CLASS_EXPORT(MyClass); // BOOST_CLASS_EXPORT_GUID(MyClass, "MyClass"); と同値


オブジェクト追跡
あるオブジェクトが2つのオブジェクトからポインタで関連付けられたりしている場合に、2重にシリアライズされてしまうのを防ぐために MFCでは ハッシュマップに シリアライズ済みのオブジェクトのポインタを登録しておき、すでにシリアライズ済みのオブジェクトだったらかわりにそれをあらわすIDを書き出すという処理を行っていた。
また、循環参照の場合にもこの処理を行わないと無限ループに陥ってしまう。
boostでも同様の処理を行っていて、これをオブジェクト追跡と呼んでいるみたいで、この動作を指定できる。
3つのモードがあって、

  • track_never = 常にOFF(組み込み型のデフォルト設定)
  • track_selectively = ポインタを介してシリアライズするときのみON。(その他のクラスのデフォルト設定)
  • track_always = 常にON
通常はデフォルトのままで問題がないが、ダイアモンド継承のときには常にONにする必要があるようだ。(でないと基底クラスが2重にシリアライズされる)。その場合BOOST_CLASS_TRACKINGマクロを使って次のように指定する。
BOOST_CLASS_TRACKING(MyClass, boost::serialization::track_always);


バージョン管理
クラスのメンバが変更したときなどのために、シリアライズ時にはクラスのバージョン番号が書き込まれ、serialize()メンバ関数の第2引数にその番号が渡されてくる。
この番号をみて処理を振り分けることで異なるバージョン間での互換性を保つことができる。
バージョン番号は BOOST_CLASS_VERSIONマクロで次のように指定する。

BOOST_CLASS_VERSION(MyClass, 3); // version = 3

指定しなかった場合のデフォルトのバージョン番号は 0。

<< serialization - XML archive Site Top serialization - デフォルトコンストラクタのないクラス >>

Comments

ルイ ヴィトン キーケース gucci
2023/09/05 12:30 AM
ブランドコピーブランドを取り扱う販売専門店,
ロレックス、オメガ、パネライ、カルティエ、
ウブロなど世界中のブランドコピー時計
アイテムをお値打ち価格と安心のサービスでお届けします。
ルイ ヴィトン キーケース gucci https://www.tentenok.com/products-small-l-28-p-5.html
ロレックス 文字盤 花柄 3点セット
2023/09/24 06:34 PM
ブランド通販店(*^-^*)
ブランドコピーブランドメンズレディースファッション時計バッグ財布を海外通販!
ブランドコピーブランド激安ショッピングサイトです。
送料無料(日本全国)!
サポート体制も万全です。スタイルが豊富で。
最新作も随時入荷いたしております。
ご安心購入くださいませ。
ロレックス 文字盤 花柄 3点セット http://www.sbagshop.com/Super-Copy-6694.html
3210.50 スーパーコピー
2023/10/11 06:03 AM
スーパーコピー時計ブランドコピー財布専門店

ルイ・ヴィトン | エルメス | グッチ |
プラダ| セリーヌ | ゴヤール|エルメス特集 | ブランド館(拜?)
ルイ・ヴィトン | エルメス | ゴヤール|ジュエリー・アクセサリー | 靴
主要取扱商品 バッグ、財布、腕時計、靴、装飾品、小物等!
プロのブランドコピーの専門家,スーパーコピーの先駆者、国内で最高に成熟したブランドコピー専門店。
スイスのチップ適用、実物写真、実物が写真および描写と一致、公式サイトの外観、規格、機能と一致。
3210.50 スーパーコピー https://www.bagb78.com/goods-2144.html
時計 スーパーコピー ムーブメント 3135
2023/10/12 07:06 AM
妻の誕生日プレゼントに買いました。
商品の到着も早く、品物もイメージ通りでした。
割安に買えて良かったと思っていますが、贈り物用の梱包があったらなお良いと思います。
妻も多分喜んでくれると思います。誕生日が楽しみです。
ありがとうございました。
時計 スーパーコピー ムーブメント 3135 https://www.jpw128.com/product/detail-5762.html
オメガ ff
2023/12/06 01:02 AM
S級ブランドコピーブランド品販売
シャネルが発表しているニュートラベルラインは、素材にナイロンを採用したカジュアルさが持ち味。
美しいカラーバリエーションやデザインで気軽に使えるバッグを始め、シンプルなバッグまで幅広く作られています。
オメガ ff https://www.etanoob.com/product/4509.htm