Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 132

Автор Π”. БтСфСнс

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 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++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ»ΠΎΡ…ΠΎ Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΡƒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π³Π»Π°Π²Ρ‹: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ², константныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ- Ρ‡Π»Π΅Π½Ρ‹, нСзависимыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (Ρ‚.Π΅. Π½Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса) ΠΈ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅ΠΌ.