J'ai récemment découvert le mot-clé friend classes C++ et les utilisations en sérialisation et maintenant j'ai besoin d'aide pour le faire fonctionner.Sérialisation de classe C++
Je n'ai aucun problème à sérialiser ma classe dans un fichier, ça marche très bien, mais j'ai du mal à essayer de lire ce fichier dans un conteneur de vecteurs. Je suis sûr que j'ai besoin d'une boucle dans mon code qui lit ligne par ligne, mais comme la classe a des types différents je suppose que je ne peux pas utiliser std :: getline() et peut-être que cette approche n'utiliserait pas la méthode istream mis en œuvre? Un fichier de sortie de l'échantillon serait:
Person 1
2009
1
Person 2
2001
0
Mon code:
class SalesPeople {
friend ostream &operator<<(ostream &stream, SalesPeople salesppl);
friend istream &operator>>(istream &stream, SalesPeople &salesppl);
private:
string fullname;
int employeeID;
int startYear;
bool status;
};
ostream &operator<<(ostream &stream, SalesPeople salesppl)
{
stream << salesppl.fullname << endl;
stream << salesppl.startYear << endl;
stream << salesppl.status << endl;
stream << endl;
return stream;
}
istream &operator>>(istream &stream, SalesPeople &salesppl)
{
stream >> salesppl.fullname;
stream >> salesppl.startYear;
stream >> salesppl.status;
// not sure how to read that empty extra line here ?
return stream;
}
// need some help here trying to read the file into a vector<SalesPeople>
SalesPeople employee;
vector<SalesPeople> employees;
ifstream read("employees.dat", ios::in);
if (!read) {
cerr << "Unable to open input file.\n";
return 1;
}
// i am pretty sure i need a loop here and should go line by line
// to read all the records, however the class has different
// types and im not sure how to use the istream method here.
read >> employee;
employees.push_back(employee);
D'ailleurs, je sais que la bibliothèque Boost a une grande classe de sérialisation, mais je suis en train d'apprendre comment sérialisation fonctionnerait en utilisant la bibliothèque STL pour le moment. Merci beaucoup d'avance pour toute aide que vous pouvez me donner et pour me mettre dans la bonne voie!
Merci beaucoup! Ça a beaucoup aidé! Maintenant, je comprends mieux ce que je faisais de mal. En outre, je n'avais aucune idée de ws, je me demandais comment faire cela depuis longtemps! Merci beaucoup! – nmuntz
Pas de problème, content de pouvoir aider! – Venesectrix