У меня есть класс mat4 из 3-й части математической библиотеки с открытым исходным кодом.У него нет собственного метода сериализации, поэтому я создал отдельный заголовок в своем основном проекте, который содержит сериализацию матрицы mat4:
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
Она работала отлично до тех пор, пока я не добавил сериализацию непосредственно в классmat4 и забыл удалить старую сериализацию:
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
};
После такой модификации была вызвана бесплатная функция serialize.Не могли бы вы объяснить, почему была вызвана функция free вместо функции-члена mat4?Возможно, в стандарте есть некое простое правило, которое я пропустил.
Когда я закомментирую свободную функцию - вызывается функция-член.