ページ 11

配列のシリアライズ

Posted: 2013年10月18日(金) 21:52
by kiuri
こんばんは、いつもお世話になっております。

現在自分の作っているゲームのセーブロードのためシリアライザを作っています。
boost::Serializationを使うことも考えたのですが、あそこまで大掛かりなものを必要としないため自作しています。

今のところ、intやdouble等のPOD型(?)をシリアライズ、デシリアライズするところまで来ました。
しかし、配列をシリアライズしようとするところでいい方法が思いつかず詰まっております。

コード:

template<typename T>
void load(iostream stream, T &obj){
    stream->read((char*)(&obj), sizeof(obj));
}
template<typename T>
void load(iostream stream, T *obj){
    stream->read((char*)(obj), sizeof(*obj));
}
上のコードのように、テンプレートを使っているのですが配列を引数に取ると当たり前なのですがただのポインタをなってしまいます。
そこで配列の場合は別に、引数にサイズをとるような関数を作ればいいのでは?と思ったのですが、二次元配列などだとお手上げになってしまいそうです。
何か良い方法はないでしょうか?

Re: 配列のシリアライズ

Posted: 2013年10月18日(金) 22:33
by h2so5
std::vectorを使いましょう

Re: 配列のシリアライズ

Posted: 2013年10月18日(金) 22:42
by kiuri
それは通常の配列自体をvectorに変更してという意味ですしょうか?
確かにそれが一番・・・と思ったのですが、実はchar str[128]などもシリアライズできないことに・・・
代わりにstringを使えばそれまでと言えばそうなのですが

Re: 配列のシリアライズ

Posted: 2013年10月18日(金) 22:49
by h2so5
std::vectorやstd::string、std::array (boost::array) があるのに配列を使わなければいけない理由はなんでしょうか。

Re: 配列のシリアライズ

Posted: 2013年10月18日(金) 22:59
by kiuri
特にないですね・・・
普段vectorやらarrayを使わないので思いつきませんでした。

そちらの線で進めていこうと思います。