Определение макроса C ++ без знака фунта

0

Вот заголовочный файл 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)

Это определение макросов? Тогда где знак фунта "#"?

Теги:

2 ответа

1

Короче говоря, это макрос. 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 должно использоваться вне любого пространства имен. Проверьте здесь для получения дополнительной информации.

  • 0
    Вы можете даже назвать его «вызовом макроса BOOST_SERIALIZATION_SPLIT_FREE». Хотя макросы не совсем функции, они ведут себя подобно им.
  • 0
    Можете ли вы дать мне ссылку на подробное объяснение такого использования макросов?
0

макросы для разделения функций сериализации в функции сохранения и загрузки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню