Je développe un jeu pour un cours dans mon école. Une des affectations est de permettre de sauvegarder le jeu dans un fichier et de charger ensuite le jeu à partir du même fichier.Enregistrer des pointeurs dans un fichier en C++
Le problème que j'ai est des pointeurs. Je n'alloue rien sur la pile (en raison de la propriété d'un élément par exemple) donc toutes les classes ont des pointeurs vers ce qu'elles veulent faire référence.
Bien que ce soit assez facile à résoudre (attribuer un identifiant à chaque objet et stocker cet identifiant au lieu du pointeur) le problème réel est livré avec l'héritage multiple.
Prenons la classe Acteur par exemple. Il ressemble à ceci: class Actor : public Object, public ItemOwner
où Object
est une classe de base Obj-C-style qui a un nombre de retenue et libérer, conserver et autorelease méthodes. ItemOwner est simplement une interface qui a des méthodes telles que virtual bool add(Item *item) = 0;
, virtual void remove(Item *item) = 0;
et virtual bool transfer_ownership(Item *item, ItemOwner *new_owner) = 0;
Maintenant la vraie question vient, quelle classe (es?) Devrait avoir des ID. Et Item a un pointeur sur ItemOwner alors qu'une Room a un pointeur vers un acteur. L'acteur ne doit être sauvegardé qu'une seule fois.
J'ai pensé à assigner des ID à chaque superclasse (Object, ItemOwner, etc) mais si j'ai un pointeur vers un acteur, cet acteur aura-t-il toujours la même adresse que l'objet (Actor *foo = new Actor(); foo == (Object *)foo)
? Si ce n'est pas le cas, toutes les classes du jeu devront avoir un identifiant.
Toute idée ou suggestion serait grandement appréciée.
Ceci tombe sous le thème de http://en.wikipedia.org/wiki/Serialization. – Sabuncu
L'héritage multiple semble inutile ici. Est-ce que ItemOwner n'hérite pas non plus Object? – jwueller
Eh bien, pas vraiment parce que si j'appelle Actor :: release(), il sera supprimé deux fois et ItemOwner est juste une interface –