だから私はあなたがこのようなものを持っていることを理解しています(それは実際には3D配列ではありません、私があなたを読み間違えた場合はシリアル化したい正確なコードを投稿してください):
struct Tile {
int id, passability;
};
std::vector<Tile> tileList;
std::vector
はすでに標準のBoost.Serialization機能を介してシリアル化できるため、シリアル化可能にするだけで済みますTile
。serialize
最も簡単な方法は、ロードと保存の両方を行うメンバーを追加することです。
struct Tile {
int id, passability;
template <typename Archive>
void serialize(Archive& ar, const unsigned version) {
ar & id;
ar & passability;
}
};
これで、タイプはシリアル化可能になりました。考慮すべき特別なことには、クラスメンバーがプライベートであることが含まれます—この場合、Boost.Serializationのフレンド宣言を追加する必要があります。
class Tile {
int id, passability;
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned version) {
ar & id;
ar & passability;
}
public:
Tile(int, int);
};
serialize
メンバーはテンプレートである必要があります(実際にはそうではありませんが、ライブラリを少しよく理解するまでは、そうする必要があります)。したがって、その本体全体をクラス宣言に含める必要があります(明示的なインスタンス化を使用しない限り、そうではありません)。初心者のための何か)。
save
メンバーに分割することもできますがload
、バージョン管理を開始するまでは役に立ちません。次のようになります。
struct Tile {
int id, passability;
BOOST_SERIALIZATION_SPLIT_MEMBER()
template <typename Archive>
void save(Archive& ar, const unsigned version) { ... }
template <typename Archive>
void load(Archive& ar, const unsigned version) { ... }
};
これにより、ベクトルが保持する型がシリアル化可能になります。ベクトル自体のシリアル化はただのことarchive & tileList
です。