Boost.Serialization i Xml Archive

0

Mam kod:

#include <iostream>
#include <string>
#include <fstream>

#include <boost/serialization/serialization.hpp>
#include <boost/archive/xml_oarchive.hpp>

using namespace std;

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

		template < class Archive >
		void serialize( Archive & ar, const unsigned int version ) {
			ar & test;
		}
	public:
		string test;
		Test( string s ) :
			test( s ) {
		}
		Test() {
		}
};

void save(const Test &s, const char * filename){
    // make an archive
    std::ofstream ofs(filename);
    assert(ofs.good());
    boost::archive::xml_oarchive oa(ofs);
    oa << BOOST_SERIALIZATION_NVP(s);
}

int main( int argc, char* argv[] ) {

	Test s("test");

	save(s, "test.xml");

	cout << s.test;
}

i podczas próby kompilacji dostaję:

In file included from /usr/include/boost/archive/xml_oarchive.hpp:31,
                 from ../src/Testy.cpp:13:
/usr/include/boost/archive/basic_xml_oarchive.hpp: In member function ‘void boost::archive::basic_xml_oarchive<Archive>::save_override(T&, int) [with T = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Archive = boost::archive::xml_oarchive]’:
/usr/include/boost/archive/detail/interface_oarchive.hpp:64:   instantiated from ‘Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Archive = boost::archive::xml_oarchive]’
/usr/include/boost/archive/detail/interface_oarchive.hpp:72:   instantiated from ‘Archive& boost::archive::detail::interface_oarchive<Archive>::operator&(T&) [with T = std::string, Archive = boost::archive::xml_oarchive]’
../src/Testy.cpp:24:   instantiated from ‘void Test::serialize(Archive&, unsigned int) [with Archive = boost::archive::xml_oarchive]’
/usr/include/boost/serialization/access.hpp:109:   instantiated from ‘static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/serialization/serialization.hpp:74:   instantiated from ‘void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/serialization/serialization.hpp:133:   instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/archive/detail/oserializer.hpp:144:   instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::xml_oarchive, T = Test]’
../src/Testy.cpp:61:   instantiated from here
/usr/include/boost/archive/basic_xml_oarchive.hpp:88: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::serialization::is_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::************)’

Z innymi archiwami działa poprawnie. Nie mogę dojść jaka jest tego przyczyna.

PS
Korzystam z Boost 1.37.0 i GCC 4.4.0

0

sprawdz co ukrywa sie za testem boost::serialization::is_wrapper i dojdz czemu jest on przykladany na typ std::string. pewnie wyjdzie ze albo jest bug w tej wersji biblioteki, albo ze brakuje i jakiegos #include ktory dostarczy czegos do obslugi ktorejs z klas..

1 użytkowników online, w tym zalogowanych: 0, gości: 1