J'ai une classe contenant de nombreuses variables différentes, par exemple il y a quelques vecteurs multidimensionnels là-bas. P>
J'ai entendu dire que vous pouvez stocker et charger des données directement dans un fichier, mais dans quelle mesure? P>
Par exemple, si je crée une instance de cette classe, remplissez-la, puis enregistrez-la dans un fichier, puis-je le charger de la même manière? Comme comment ça marche? Est-ce que je viens de sauvegarder tout en une seule fois ou dois-je faire scinder les données d'une manière ou d'une autre? P>
3 Réponses :
Vous pouvez envisager d'implémenter les opérateurs de flux.
Avec ceux-ci, vous pouvez simplement utiliser ce qui suit pour lire et écrire: p> essentiellement dans l'opérateur >>, vous allez lire le flux et construire l'objet avec le données trouvées.
Dans l'opérateur <<, vous écrivez l'objet dans le flux du même format que vous vous attendez à le lire. P> Utilisation de cette façon de travailler, vous pouvez sérialiser n'importe quel objet que vous avez. P> < p> Google pour "Opérateurs de flux de surcharge" pour savoir comment mettre en œuvre ces opérateurs. p> p>
C'est ce que je fais aussi .. J'ai un cadre de sérialisation qui surcharge les mêmes opérateurs. Je suis sûr que certains diront-ils - ne refusez pas la roue et utilisez simplement Boost ou quelque chose. J'aime avoir le contrôle du code qui fait quelque chose d'aussi fondamental.
Vous pouvez soit fournir un code qui ira bien à travers tous les membres d'une classe (à sauter éventuellement à sauter les non-importants et à convertir des autres) et préparez un flux continu de données. C'est la sérialisation dans le sens plus étroit. De la même chose doit être faite à l'inverse lors de la lecture. P>
en C ++, vous pouvez également effectuer une vidage binaire, comme CopyMemory (PTR, Tailleof (* PTR) code>. Il ne peut fonctionner que si vos données ne contiennent aucun pointeur (particulièrement inclut un pointeur caché pour les classes avec Méthodes virtuelles). Ses seuls hauts sont la simplicité et une vitesse formidable. Cette approche nécessite que vos données soient contiguës en mémoire, ce qui est parfois bénéfique de sa propre. p>
Ce n'est pas exactement le sujet du débutant en C ++
C ++ n'a pas de moyen automatisé de stocker / charger vos objets vers / à partir d'un fichier. De toute façon, vous avez choisi d'y aller, vous devrez la mettre en œuvre vous-même. P>
Vous pouvez choisir de surcharger le Voici un exemple simple (avec un
>> code> opérateurs à Utiliser avec des flux ou vous souhaiterez peut-être aller avec votre propre
Charger code> et
Store CODE> METHODES (ou les noms que vous avez choisis appropriés, comme,
Serialize code> /
désériorize code>). Personnellement préférez créer mes propres fonctions et de ne pas utiliser les opérateurs, mais c'est juste moi. P>
et
>> CODE> Opérateurs): P>
#include <fstream>
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass (int x) : m_x(x), m_y(x+1) {}
friend istream& operator >> (istream& in, MyClass& obj);
friend ostream& operator << (ostream& out, const MyClass& obj);
private:
int m_x;
int m_y;
};
istream& operator >> (istream& in, MyClass& obj)
{
in >> obj.m_x;
in >> obj.m_y;
return in;
}
ostream& operator << (ostream& out, const MyClass& obj)
{
out << obj.m_x << ' ';
out << obj.m_y << endl;
return out;
}
int main(int argc, char* argv[])
{
MyClass myObj(10);
MyClass other(1);
cout << myObj;
ofstream outFile ("serialized.txt");
outFile << myObj;
outFile.close();
ifstream inFile ("serialized.txt");
inFile >> other;
inFile.close();
cout << other;
return 0;
}
Vous devez convertir vos données vers et depuis une séquence d'octets. Lisez sur la "sérialisation".
Vous recherchez une "sérialisation" et "désériorialisation". Quel cadre utilisez-vous, ou est-ce que cette STL pure?