Ich habe eine Klasse Mat4 von 3rd Party Open Source Math Bibliothek. Es hat keine eigene Serialisierungsmethode, also habe ich einen separaten Header in meinem Hauptprojekt erstellt, die eine Serialisierung der Matrix MAT4 enthält:Boost :: Serialisierung mit Member-Funktion und freie Funktion
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive & ar, mat4 & matrix, const unsigned int version)
{
// some serialization of matrix goes here...
}
} // namespace serialization
} // namespace boost
Es funktionierte perfekt, bis später, als ich die Serialisierung direkt in die Klasse MAT4 hinzugefügt und vergessen, die alte Serialisierung zu entfernen:
struct mat4
{
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & BOOST_SERIALIZATION_NVP(data);
}
// some other members and functions goes here
};
Nach einer solchen Änderung wurde die freie Funktion serialize aufgerufen. Könnten Sie bitte erklären, warum die free-Funktion anstelle der mat4-Member-Funktion aufgerufen wurde? Wahrscheinlich gibt es im Standard eine einfache Regel, die ich vermisst habe.
Wenn ich die freie Funktion auskommentieren - Member-Funktion wird aufgerufen.
danke! sehr schöne Technik. – innochenti