2

プログラミングしているゲームの地面の個々のタイルを表すオブジェクトがあります。オブジェクトのインスタンスを保持するベクトルもあります。このリストをファイルに保存する最良の方法は何ですか? ベクトルをループして、各 x、y 座標と、オブジェクトが使用する画像を保存することはできますが、それは少し大雑把に思えます。ブースト ヘッダー ファイルは使用できますが、現在、ブーストの残りの部分をビルドして使用しようとすると、大きな問題が発生します。助言がありますか?

4

3 に答える 3

1

C++ にはシリアル化機能が組み込まれていないため、通常、保存するオブジェクトがほとんどまたは現在構築 (int、float など) を必要としない場合は、何をしても少し「粗野」になります。次のように、一度にベクトルします。

std::vector <int> data(16, 0);
std::ofstream output("binary.data");
output.write(static_cast<char *>(&(data[0])), data.size()*sizeof(int));

ただし、複数ステップのコンストラクター (std::string など) を必要とするデータ型がある場合は、要素をループし、ディスクから読み取るときにオブジェクトを再構築するのに十分な情報を使用して個別に書き出す必要があります。

于 2013-03-07T15:24:13.950 に答える
1

それは確かに私には十分な解決策のようです。{x, y, image_filename} のような形式を使用すると、コードの保存またはコードの読み込みが問題を引き起こしているかどうか (問題が発生した場合) を調べて確認できるため、デバッグが少し簡単になります。完全な image_filename が必要になる可能性が最も高いため、とにかくバイナリソリューションを使用して多くのスペースを節約できるとは思いません。

Boost::Serializationが提供するものを見ることができます。

于 2013-03-07T15:26:25.740 に答える
0

Boost::Serializationを全面的に支持し ます。実際には、テキスト形式とバイナリ形式のどちらが必要かを選択できます。私は通常、開発/デバッグ中にテキスト アーカイブへの書き込み/読み取りを行ってから、展開用にバイナリ形式に切り替えます。バイナリ形式は異なるアーキテクチャ間で移植できないことに注意してください。したがって、アーカイブの移植性が懸念される場合は、テキスト形式を使用してください。

オブジェクトが変更された場合、または派生クラスをシリアライズしたい場合は、非常に簡単に行うことができ、アーカイブのバージョン管理も行うことができます。この特定のホイールを再実装する必要は本当にありません:-)

Boost のインストール (バージョン? OS? コンパイラ?) で発生している問題に関する詳細情報を提供できるかもしれません。きっと誰かが助けてくれるでしょう。

于 2013-03-07T15:36:31.360 に答える