ΠΡΠΈΠΌΠ΅Ρ 14.27 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Boost.Serialization Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° std::vector, ΡΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Animal, Π² ΡΠ°ΠΉΠ»Π΅ animals.xml ΠΈ Π·Π°ΡΠ΅ΠΌ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.28 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° animals.xml ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.27.
ΠΡΠΈΠΌΠ΅Ρ 14.27 Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° std::vector, ΡΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Animal
#include <fstream>
#include <boost/archive/xml_oarchive.hpp> // ΠΡΡ ΠΈΠ² Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ XML
#include <boost/archive/xml_iarchive.hpp> // ΠΡΡ ΠΈΠ² Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ XML
#include <boost/serialization/vector.hpp> // Π‘ΡΠ΅Π΄ΡΡΠ²Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π΅ΠΊΡΠΎΡΠ°
#include "animal.hpp" // std::vector
int main() {
using namespace std;
using namespace boost::archive; // ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ Π°ΡΡ ΠΈΠ²ΠΎΠ²
using namespace boost::serialization; // ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ make_nvp
try {
// ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΆΠΈΠ²ΠΎΡΠ½ΡΡ
vector<Animal> animalList;
animalList.push_back(
Animal("Herby", "elephant", "1992-04-23",
Contact("Dr. Hal Brown", "(801)595-9627"),
Contact("Bob Fisk", "(801)881-2260")));
animalList.push_back(
Animal("Sheldon", "parrot", "1998-09-30",
Contact("Dr. Kevin Wilson", "(801)466-6498"),
Contact("Eli Wendel", "(801)929-2506")));
animalList.push_pack(
Animal("Dippy", "penguin", "2001-06-08",
Contact("Dr. Barbara Swayne", "(801)459-7746"),
Contact("Ben Waxman", "(801)882-3549")));
// Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΡ ΠΈΠ² XML ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ
ofstream fout("animals.xml");
xml_oarchive oa(fout);
oa << make_nvp("animalList", animalList);
fout.close();
// Π‘ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΡ ΠΈΠ² XML ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ
ifstream fin("animals.xml");
xml_iarchive ia(fin);
vector<Animal> animalListCopy;
ia >> make_nvp("animalList", animalListCopy);
fin.close();
if (animalListCopy != animalList) {
cout << "XML serialization failed\n";
return EXIT_FAILURE;
}
} catch (const exception& e) {
cout << e.what() << "\n";
return EXIT_FAILURE;
}
}
ΠΡΠΈΠΌΠ΅Ρ 14.28. Π€Π°ΠΉΠ» animals.xml ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° 14.27
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="3">
<animalList class_id="0" tracking_level ="0" version="0">
<count>3</count>
<item class_id="1" tracking_level="0" version="0">
<name>Herby</name>
<species>elephant</species>
<dateOfBirth class_id="2" tracking_level="0" version="0">
<date>19920423</date>
</dateOfBirth>
<veterinarian class_id="3" tracking_level="0" version="0">
<name>Dr. Hal Brown</name>
<phone>(801)595-9627</phone>
</veterinarian>
<trainer>
<name>Bob Fisk</name>
<phone>(801)881-2260</phone>
</trainer>
</item>
<item>
<name>Sheldon</name>
<species>parrot</species>
<dateOfBirth>
<date>19980930</date>
</dateOfBirth>
<veterinarian>
<name>Dr. Kevin Wilson</name>
<phone>(801)466-6498</phone>
</veterinarian>
<trainer>
<name>Eli Wendel</name>
<phone>(801)929-2506</phone>
</trainer>
</item>
<item>
<name>Dippy</name>
<species>penguin</species>
<dateOfBirth>
<date>20010608</date>
</dateOfBirth>
<veterinarian>
<name>Dr. Barbara Swayne</name>
<phone>(801)459-7746</phone>
</veterinarian>
<trainer>
<name>Ben Waxman</name>
<phone>(801)882-3549</phone>
</trainer>
</item>
</animalList>
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Boost Serialization ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΠΎΡΡΠ΅Π½Π½ΡΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² C++. ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ XML: ΠΊΡΠΎΠΌΠ΅ Π°ΡΡ ΠΈΠ²ΠΎΠ² XML ΠΎΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠ² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΡ Π°ΡΡ ΠΈΠ²ΠΎΠ². ΠΡΡ ΠΈΠ²Ρ XML ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΌΠΈ, Ρ.Π΅. Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ; Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Ρ.
ΠΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π±Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ XML, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Boost.Serialization, ΠΈ ΠΈΡ ΡΠΎΡΠΌΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ Boost. ΠΠΎΡΡΠΎΠΌΡ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π‘++. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ XML-ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ½ΠΎΡΠΈΡ ΠΏΠΎΠ»ΡΠ·Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π»Π΅Π³ΠΊΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° XML.
ΠΡΠΈΠΌΠ΅ΡΡ 14.25 ΠΈ 14.26 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ ΠΈΠ½ΡΡΡΠ·ΠΈΠ²Π½ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (intrusive serialization): ΠΊΠ»Π°ΡΡΡ Animal ΠΈ Contact Π±ΡΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ. Boost.Serialization ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΈΠ½ΡΡΡΠ·ΠΈΠ²Π½ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (nonintrusive serialization), ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π²ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠ΅ΡΠ΅Π· Π΅Π³ΠΎ ΠΎΡΠΊΡΡΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΈΠ½ΡΡΡΠ·ΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 14.27: ΡΠ°Π±Π»ΠΎΠ½ std::vector Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΌΠΈ; Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ xxx, ΠΏΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» boost/serialization/xxx.hpp. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π΅ΠΈΠ½ΡΡΡΠ·ΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Boost.Serialization.
ΠΡΠΈΠΌΠ΅ΡΡ 14.25 ΠΈ 14.26 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄Π²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΎΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° &: ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ << ΠΏΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ >> ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ; Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π² Boost.Serialization ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° serialize() Π½Π° Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, load() ΠΈ save(). ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Boost.Serialization.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ 14.25, 14.26 ΠΈ 14.27 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ boost::serialization::make_nvp Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°Ρ Π²ΠΈΠ΄Π° Β«ΠΈΠΌΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β». Π Boost.Serialization ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΠΊΡΠΎΡ BOOST_SERIALIZATION_NVP, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π΅Π΅ ΠΈΠΌΡ. ΠΠ΅ΡΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠ°ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Β«ΡΡΡΠΈΠ½Π³ΠΈΠ·Π°ΡΠΈΠΈΒ» (stringizing) # Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
// Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ ar & make_nvp("name_", name_);
ar & BOOST_SERIALIZATION_NVP(name_);
Π ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ make_nvp Π²ΠΌΠ΅ΡΡΠΎ BOOST_SERIALIZATION_NVP Π΄Π»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΈΠΌΠ΅Π½ ΡΠ΅Π³ΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π°ΡΡ ΠΈΠ²Π° XML Π»Π΅Π³ΡΠ΅ ΡΠΈΡΠ°Π»ΠΎΡΡ.
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Boost.Serialization ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ serialize() ΠΊΠ°ΠΊ Π·Π°ΠΊΡΡΡΡΠΉ (private) Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Boost.Serialization ΠΌΠΎΠ³Π»Π° Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ serialize() Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π΄ΡΡΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡ boost::serialization::access.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° serialize() Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ 14.25 ΠΈ 14.26 ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΎΠΉ ΡΠ°ΡΡΠΈ Boost.Serialization, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (class versioning). ΠΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π°ΡΡ ΠΈΠ²Π΅, Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΡ; ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ°. Boost.Serialization ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ serialize Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, serialize ΠΌΠΎΠ³ Π±Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ-ΡΠ»Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² Π°ΡΡ ΠΈΠ² Π²Π΅ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠ±ΡΡΠ²ΠΈΠ²ΡΠΈΠΌ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ Π²Π΅ΡΡΠΈΡ 0. ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡ BOOST_CLASS_VERSION, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ boost/serialization/version.hpp, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΡ ΠΈ Π²Π΅ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ»Π°Π²Π° 15
Π Π°Π·Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
15.0. ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ C++, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ»ΠΎΡ ΠΎ Π²ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π³Π»Π°Π²Ρ: ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ»Π΅Π½ΠΎΠ², ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ- ΡΠ»Π΅Π½Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ (Ρ.Π΅. Π½Π΅ ΡΠ»Π΅Π½Ρ ΠΊΠ»Π°ΡΡΠ°) ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΠΌ.