没有井号的 C++ 宏定义

标签 c++

这是我在别处找到的一个 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 必须在任何命名空间之外使用。查看here了解更多信息。

关于没有井号的 C++ 宏定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20779252/

相关文章:

c++ - 以 "almost always auto"样式初始化 ZeroMQ 2.2 消息要使用私有(private)构造函数

c++ - 当 C++ 程序结束时,指针是否从内存中释放?

c++ - 将 2 个十六进制值组合成 1 个十六进制值

c++ - C++ 中的 float 到二进制数

c++ - 奇怪的一段代码

c++ - 文件下载 - 文件写入前检查错误

c++ - Unresolved external symbol (已经阅读过类似的问题,但没有运气)

C++ 根据其他信息排序索引

c++ - 使用 Boost 的 Linux 的 Visual Studio 2017 远程构建

c++ - 如何将数据发送到QT中打开的tty0tty空调制解调器仿真器端口