J'essaie de comprendre la bibliothèque de sérialisation de Boost. (voir le tutoriel) et j'aime bien la façon non intrusive de sérialiser une classe parce que cela signifie que je peux mettre tout mon code de sérialisation dans des fichiers séparés :
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class gps_position
{
public:
int degrees;
int minutes;
float seconds;
gps_position(){};
gps_position(int d, int m, float s) :
degrees(d), minutes(m), seconds(s)
{}
};
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, gps_position & g, const unsigned int version)
{
ar & g.degrees;
ar & g.minutes;
ar & g.seconds;
}
} // namespace serialization
} // namespace boost
Bien que cette méthode fournisse une fonction 'serialise', qui peut être utilisée pour sérialiser la classe 'gps_position', je ne suis pas sûr que la classe soit elle-même un élément de la classe 'gps_position'. sérialisable (c'est-à-dire qui agit comme une primitive en termes de sérialisation/désérialisation) une fois que cette fonction a été créée, ou si je dois utiliser la méthode intrusive pour cela...
En d'autres termes, si j'ai une autre classe qui contient, par exemple, un vecteur d'instances 'gps_position', Boost saura-t-il rechercher la fonction surchargée 'serialize' dans l'espace de noms Boost::serialization correspondant à un paramètre 'gps_position' lorsque j'essaierai de sérialiser la classe parente ? Ou bien cherchera-t-il seulement explicitement une méthode "serialize" de la classe (qu'il ne trouvera pas dans ce cas) ?
Je n'ai pas trouvé la réponse à cette question dans les didacticiels et j'espérais que quelqu'un ayant de l'expérience dans l'utilisation de cette bibliothèque pourrait m'éclairer !
P.S J'hésite à "essayer" car je ne sais pas à quoi devrait ressembler l'échec (Boost va-t-il simplement sérialiser "quelque chose" ?)...