注意:我沒有在年齡中使用C++,所以使用語法/庫函數並不完全準確。不過,希望它能傳遞這個想法。
救援的設計模式!將一些處理程序註冊到Save
類中,該類將爲您保存每個變量。
首先,我們定義了一個interface:
class ISerializable {
public:
virtual std::vector<byte> serialize() { throw new NotImplementedException; }
}
接下來,我們寫Save
類來保存每個處理程序:
class Save {
std::map<std::string, ISerializable> handlers;
public:
void save(string filename) {
// Open file as writeable bytes
std::ofstream outFile(filename, std::binary | std::trunc);
// You may want to use an iterator here.
// I forgot the exact syntax.
// pair.Key is the name
// pair.Value is the class you are saving
foreach(pair in handlers) {
// This is an example.
// Your actual file format will be a bit more complicated than this.
outFile << "Name: " << pair.Key
<< "Data: " << pair.Value.serialize();
}
}
void attachHandler(std::string name, ISerializable handler) {
handlers[name] = handler;
}
}
然後爲要保存每個變量,定義序列化功能:
class MyObject : public ISerializable {
public:
std::vector<byte> serialize override {
// return some list of bytes
}
}
並附上它的處理程序,以一個Save
實例:
Save save; // Instantiate your saving object.
// Consider making this static.
MyObject myObject;
save.attachHandler("myObject", myObject);
你可能要考慮XML作爲存儲格式:存儲原始字節可能會非常棘手,如果不這樣做的權利。
您將收到的所有答案都將基於觀點,因此可能不是SO的最佳問題。然而,無論如何,我會給出我的看法:我認爲從getters獲取數據不是一個好主意,因爲您可以使用不同的對象進行不同的保存。我認爲最好的選擇是爲要保存到文件的每個對象設置保存功能,併爲您的關卡中的所有可保存對象調用保存功能。考慮到這一點,最好將所有可保存的對象存儲到某個數據結構中,並將文件流對象傳遞給這些迭代中的每一個。 – bpgeck
是的,我想這不是真正的這些問題的地方。感謝您的答案,但似乎是合理的。 – ludolover
以XML或Init等格式存儲數據。使用庫來讀取和寫入數據。也搜索「C++結構序列化」的互聯網。 –