ページ 11

MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月27日(土) 13:14
by びぎ
JAVAの世界ではオブジェクト永続化、データの永続化=シリアル化?
よく耳にするんですけれども、MSのVC2012でもできるのでようか。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月27日(土) 13:30
by びぎ
ごめんなさい訂正させて下さい
誤:MSのVC2012でもできるのでようか。
正:MSのVC2010でもできるのでしょうか。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月27日(土) 17:17
by h2so5
できますよ。
自分でシリアライザを書くか、あるいはBoost.serializationなどのライブラリを使う方法があります。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月30日(火) 10:13
by びぎ
ありがとうございます。
返信が遅れて大変申し訳ございません!
できればシリアライザを自分で書きたいですね。
というか、これだけのためにライブラリーを導入する気はありません。

さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
それに、padding fieldはランダムデータとしてそのままファイルに入るのでしょうか。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月30日(火) 13:31
by h2so5
びぎ さんが書きました:さて、そのシリアライザに関する基本方法ですが、
プログラム実行中のobjectが占めているメモリをそのサイズ分に2進データとして
そのまま丸ごとファイルに落せばOKでしょうか。
その方法でシリアライズできるオブジェクトは限られます。
POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
ポインタが含まれる場合も上手くいかないでしょう。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月30日(火) 18:55
by びぎ
早速ご返答ありがとうございます。

> POD(Plain Old Data)というC言語互換の型でないとまず駄目ですし、
> ポインタが含まれる場合も上手くいかないでしょう。

これは宿命てきな事ではないでしょうか。
シリアライザって上記のような不都合を回避できるのでしょうか。
なんで?

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月30日(火) 20:28
by h2so5
シリアライズの例としてゲームのセーブデータを考えてみれば分かると思いますが、
セーブデータはゲームの状態の復元に必要なデータを出力しているだけで、ゲームの状態をまるごと保存してはいません。

シリアライズはオブジェクトを復元するためのデータをコンテクストに依存しない形で生成することであって、
メモリの状態をそのまま出力するということではないです。
(もちろん、オブジェクトによってはそのまま出力してもよい場合もあるでしょう)

例えば、boost::serializationではvectorなどのSTLコンテナをXMLなどに出力することができます。
復元するときはXMLを解析して、STLコンテナを作り直すわけです。

Re: MSのVC2012でオブジェクト永続化、データの永続化?

Posted: 2012年10月31日(水) 09:36
by びぎ
h2so5 様
素晴らしい解説ありがとうございました!
すっきりしました。