Ok, ich wollte nur mal eben bei meinem Projekt eine Klasse in ein XML dumpen und wieder einlesen. Hab ich ja mit boost::serialization schon öfter gemacht. Leider hab ich die Klasse aber unter Qt entworfen und daher Basistypen wie QString verwendet. Dieser hat sich allerdings zunächst geweigert…

Mit folgendem Code gings dann ganz leicht. Einziger Nachteil: es wird immer ein zusätzlicher <value>-Tag eingefügt.

// \file qstring_serialization.h
//  Enables serialization of Qt QString
//
//  Copyright (c) 2010 Florian Muecke. Distributed under the Boost
//  Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
#ifndef QSTRING_SERIALIZATION_H
#define QSTRING_SERIALIZATION_H
 
#include <QString>
#include <string>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/string.hpp>
 
namespace boost {
namespace serialization {
 
 
template<class Archive>
inline void save( Archive& ar, const QString& s, const unsigned int /*version*/ )
{
	using boost::serialization::make_nvp;
	ar << make_nvp("value", s.toStdString());
}
 
template<class Archive>
inline void load( Archive& ar, QString& s, const unsigned int /*version*/ )
{
	using boost::serialization::make_nvp;
 
	std::string stdStr;
	ar >> make_nvp("value", stdStr);
	s = QString::fromStdString(stdStr);
}
 
template<class Archive>
inline void serialize( Archive& ar, QString& s, const unsigned int file_version )
{
	boost::serialization::split_free(ar, s, file_version);
}
 
} // namespace serialization
} // namespace boost
 
#endif // QSTRING_SERIALIZATION_H

Analog kann man das Ganze natürlich auch für CString in der MFC machen…