C++ でシリアライズと聞くと、「どうやって?」と疑問に思うのですが、 Boost で実現する方法を調べていたところ、「ああ、なるほど」と思えました。
まず、自分が作ったクラスをシリアライズ可能にするためには、シリアライザにデータを渡したり、デシリアライザからデータを受け取ったりするメソッドを追加し、シリアライズのライブラリがそれにアクセスできるように friend 定義を追加します。
ここまでは想像できるかと思います。しかし、少し考えると、自分で作ったクラスの中で STL 等を使いたい、 STL でなくとも他人が作ったクラスを使いたい、と思い至り、この方法ではシリアライズできないことに気づくと思います。
はい、どうやらできないようです。
しかし、 string や vector やスマートポインタ等、代表的なデータ構造はシリアライズ対応版が Boost のヘッダファイルにあるそうです。これは安心ですね。
#include <boost/serialization/string.hpp> #include <boost/serialization/vector.hpp>
他人が作ったクラスは、シリアライズメソッドの中で、シリアライズに似たようなことを自分で書くしかないかもしれません。何か良い方法があるのかもしれませんが、自分はゲームでしか使う予定がないので、これ以上追求しませんでした。とりあえずセーブデータが入ればいいかと思います。
Contributions