boost::serialization: XML archive

Тема в разделе "LANGS.C", создана пользователем _DEN_, 17 фев 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Вот такой код:

    Код (Text):
    1. #include <boost/archive/xml_oarchive.hpp>
    2.  
    3. using namespace boost::archive;
    4.  
    5. struct request
    6. {
    7.     std::wstring path;
    8.     std::string mask;
    9.  
    10.     template<class Archive>
    11.     void serialize(Archive& ar, unsigned int const version)
    12.     {
    13.         ar & BOOST_SERIALIZATION_NVP(path);
    14.         ar & BOOST_SERIALIZATION_NVP(mask);
    15.     }
    16. };
    17.  
    18. int main()
    19. {
    20.     xml_oarchive oa(std::cout);
    21.  
    22.     request req;
    23.  
    24.     req.path = L"C:\\WINDOWS\\system32\\";
    25.     req.mask = "*.exe";
    26.  
    27.     oa << BOOST_SERIALIZATION_NVP(req);
    28.  
    29.     return 0;
    30. }
    Выдает такой аутпут:

    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    2. <!DOCTYPE boost_serialization>
    3. <boost_serialization signature="serialization::archive" version="5">
    4. <req class_id="0" tracking_level="0" version="0">
    5.         <path>C:\WINDOWS\system32\</path>
    6.         <mask>*.exe</mask>
    7. </req>
    8. </boost_serialization>
    Вопросы:

    1. Как поставить свой !DOCTYPE
    2. Как переименовать boost_serialization и убрать/добавить ее атрибуты?
    3. Как убать/добавить атрибуты объекта?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    boost/archive/impl/basic_xml_oarchive.hpp:
    Код (Text):
    1. template<class Archive>
    2. BOOST_ARCHIVE_OR_WARCHIVE_DECL(void)
    3. basic_xml_oarchive<Archive>::init(){
    4.     // xml header
    5.     this->This()->put("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n");
    6.     this->This()->put("<!DOCTYPE boost_serialization>\n");
    7.     // xml document wrapper - outer root
    8.     this->This()->put("<boost_serialization");
    9.     write_attribute("signature", ARCHIVE_SIGNATURE());
    10.     write_attribute("version", ARCHIVE_VERSION());
    11.     this->This()->put(">\n");
    12. }
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Судя по тому что значения захардкожены и тому, что CRTP не даст написать специализацию, единственным выходом остается правка исходника. Мда...
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    _DEN_
    в бусте рассылке может стоит об этом спросить? там же хорошая аудитория..