2008/02/03

boost::serializationでハマる

boost::serializationを使ってみました。

既定クラスのポインタから派生クラスのポインタをシリアライズ/デシリアライスするコードを書いていたのですが、派生クラスのserializeをloadとsaveに分割していたらloadがインスタンス化されてなくてハマりました。

残念ながらコンパイラはそのことを教えてくれないので、実行時に例外があがってしまいます。しかも、save時だとunregistered_typeとか割と分かりやすい例外があがるのですが、普通のNULLチェックのassertによる例外があがります。

最終的にはデシリアライズするcppファイルの方に派生クラスのヘッダをインクルードしたら解決したのですが、これが正しいやり方なのかどうかは良く分かりません。

テンプレート難しすぎ。

0 件のコメント: