boost serialization
От: Аноним  
Дата: 05.08.11 05:06
Оценка:
Здравствуйте.


........................
#include <fstream>

#include <boost/serialization/string.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>

class trn
{
private:
    friend class boost::serialization::access;

    int    id;
    std::string    name;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & BOOST_SERIALIZATION_NVP(id);
        ar & BOOST_SERIALIZATION_NVP(name);
    }

public:
    trn(){};
    trn(int id_, std::string name_) : id(id_), name(name_) {};
};

int _tmain(int argc, _TCHAR* argv[])
{
    trn a1(1, "test");

    std::ofstream ofs("1.xml");

    {
        boost::archive::xml_oarchive oa(ofs);
        oa << a1;
    }
    return 0;
}


Вот такая вот бяка...хотя с тестовой и бинарной сериализацией — все на ура проходит. Это читал и не понял....с серализацией в бусте не очень — так что если не трудно — поможите

d:\lib\boost_1_46_1\boost\archive\basic_xml_oarchive.hpp(92) : error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type'
1> with
1> [
1> T=trn
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1> d:\lib\boost_1_46_1\boost\archive\detail\interface_oarchive.hpp(63) : see reference to function template instantiation 'void boost::archive::basic_xml_oarchive<Archive>::save_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::xml_oarchive,
1> T=trn
1> ]
1> d:\projects\c++\ruscom\test\serialization\ser2\ser2\ser2.cpp(50) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<trn>(T &)' being compiled
1> with
1> [
1> Archive=boost::archive::xml_oarchive,
1> T=trn
1> ]
1>Build log was saved at "file://d:\Projects\C++\test\serialization\ser2\ser2\Debug\BuildLog.htm"
1>ser2 — 1 error(s), 0 warning(s)

Re: boost serialization
От: Mazay Россия  
Дата: 05.08.11 05:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>    {
А>        boost::archive::xml_oarchive oa(ofs);
А>        oa << a1;
А>    }
А>


А> Вот такая вот бяка...хотя с тестовой и бинарной сериализацией — все на ура проходит. Это читал и не понял....с серализацией в бусте не очень — так что если не трудно — поможите


А>

А>d:\lib\boost_1_46_1\boost\archive\basic_xml_oarchive.hpp(92) : error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from


А читать то, что тебе компилятор и создатели библиотеки пишут не пробовал?
Ясно же написано: "Нарушен ассерт на строчке 92 в файле basic_xml_oarchive.hpp." Смотрим файл basic_xml_oarchive.hpp в окрестности 92-й строчки. Что видим? Видим (внезапно!) ассерт. А рядом с ним комментарий:
        // If your program fails to compile here, its most likely due to
        // not specifying an nvp wrapper around the variable to
        // be serialized.
        BOOST_MPL_ASSERT((serialization::is_wrapper< T >));
Главное гармония ...
Re[2]: boost serialization
От: Аноним  
Дата: 05.08.11 05:58
Оценка:
Здравствуйте, Mazay, Вы писали:

M>
M>        // If your program fails to compile here, its most likely due to
M>        // not specifying an nvp wrapper around the variable to
M>        // be serialized.
M>        BOOST_MPL_ASSERT((serialization::is_wrapper< T >));
M>


Спасибо — помогло. Может вы подскажете как "уйти" от бустовског формата? Что то в этом роде:


<?xml version="1.0" encoding="windows-1251"?>
<Packet0 Date="2009-12-31" Code="01">
<Payer Persona="20000000002301" DopID="238031">
<Name>Иванов Иван Иванович</Name>
</Payer>
</Packet0>

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.