Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
GameObject::save(...) { // speichere GameObject Daten } Spieler::save(...) { // speichere Spieler Daten GameObject::save(...); } GameObject::load(...) { // lade GameObject Daten } Spieler::load(...) { // lade Spieler Daten GameObject::load(...); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Object : public ISerializable { public: void save(...) { // für alle Base* in m_Speicher Base->save(...); } void load(...) { // ?? } private: std::list<Base*> m_Speicher; }; |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
serialize(ptr_data_map,ref_to_id_counter) ref_to_id_counter += 1 class_identifier = get_class_name() own_attributes = serialize_data_fields_of_this_element() children_ids = [] for child_ptr in this: if child_ptr not in ptr_data_map: child_ptr.serialize(ptr_data_map,id_counter) children_ids.append(ptr_data_map[child_ptr][0]) ptr_data_map[this_ptr] = list(ref_to_id_counter,class_identifier,own_attributes + children_ids) [...] #main ptr_data_map = dict() counter = 1 serialize(ptr_data_container,counter) file = open(filename) for obj_ptr,data in ptr_data_map: obj_id,obj_type,obj_data = data file.write(obj_id) file.write(obj_type) file.write(obj_data) |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nox« (28.08.2012, 18:17)
Die IDs müssen nur für das entsprechende Abbild eindeutig sein und bei weitem keine GUID sein. Ich selbst nutze zwar ein anderes System im Rahmen einer Netzwerklib, welches ohne explizite Objekttyp-Informationen auskommt, aber hat wiederum andere Nachteile.
Zitat
Code economy - exploit features of C++ such as RTTI, templates, and multiple inheritance, etc. where appropriate to make code shorter and simpler to use.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (30.08.2012, 00:09)
Überleg mal was RTTI ist: Ein Mechanismus der über komplizierte Umwege zur Laufzeit Dinge herausfindet, die du beim Schreiben des Code eigentlich weißt.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
Base* load(...) { if(name == kind1) return new Kind1(); else if(name == kind2) return new Kind2(); // usw. } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sortoc« (31.08.2012, 13:05)
Werbeanzeige