配列のシリアライズ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kiuri
記事: 20
登録日時: 12年前

配列のシリアライズ

#1

投稿記事 by kiuri » 11年前

こんばんは、いつもお世話になっております。

現在自分の作っているゲームのセーブロードのためシリアライザを作っています。
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));
}
上のコードのように、テンプレートを使っているのですが配列を引数に取ると当たり前なのですがただのポインタをなってしまいます。
そこで配列の場合は別に、引数にサイズをとるような関数を作ればいいのでは?と思ったのですが、二次元配列などだとお手上げになってしまいそうです。
何か良い方法はないでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 配列のシリアライズ

#2

投稿記事 by h2so5 » 11年前

std::vectorを使いましょう

kiuri
記事: 20
登録日時: 12年前

Re: 配列のシリアライズ

#3

投稿記事 by kiuri » 11年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: 配列のシリアライズ

#4

投稿記事 by h2so5 » 11年前

std::vectorやstd::string、std::array (boost::array) があるのに配列を使わなければいけない理由はなんでしょうか。

kiuri
記事: 20
登録日時: 12年前

Re: 配列のシリアライズ

#5

投稿記事 by kiuri » 11年前

特にないですね・・・
普段vectorやらarrayを使わないので思いつきませんでした。

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

閉鎖

“C言語何でも質問掲示板” へ戻る