Вот заголовочный файл c++, который я нашел где-то в другом месте.
#include "opencv\cv.h"
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
BOOST_SERIALIZATION_SPLIT_FREE(cv::Mat)
namespace boost {
namespace serialization {
/** Serialization support for cv::Mat */
template <class Archive>
void save(Archive & ar, const ::cv::Mat& m, const unsigned int version)
{
size_t elem_size = m.elemSize();
size_t elem_type = m.type();
ar & m.cols;
ar & m.rows;
ar & elem_size;
ar & elem_type;
const size_t data_size = m.cols * m.rows * elem_size;
ar & boost::serialization::make_array(m.ptr(), data_size);
}
};
}
Мой вопрос: что означает следующий код?
BOOST_SERIALIZATION_SPLIT_FREE(cv::Mat)
Это определение макросов? Тогда где знак фунта "#"?
Короче говоря, это макрос. BOOST_SERIALIZATION_SPLIT_FREE(my_class)
- это макрос, который является коротким для следующего бесплатного шаблона функции сериализации:
namespace boost { namespace serialization {
template<class Archive>
inline void serialize(
Archive & ar,
my_class & t,
const unsigned int file_version
){
split_free(ar, t, file_version);
}
}}
Также обратите внимание, что BOOST_SERIALIZATION_SPLIT_FREE
должно использоваться вне любого пространства имен. Проверьте здесь для получения дополнительной информации.
макросы для разделения функций сериализации в функции сохранения и загрузки