zoukankan      html  css  js  c++  java
  • boost serialization: intrusive and non-intrusive

    boost serialization

    it has 2 modes: intrusive and non-intrusive

    intrusive mode

    class gps_position
    {
    public:
    	friend class boost::serialization::access;
    	// When the class Archive corresponds to an output archive, the
    	// & operator is defined similar to <<.  Likewise, when the class Archive
    	// is a type of input archive the & operator is defined similar to >>.
    	template<class Archive>
    	void serialize(Archive & ar, const unsigned int version)
    	{
    		ar & degrees;
    		ar & minutes;
    		ar & seconds;
    	}
    	int degrees;
    	int minutes;
    	float seconds;
    public:
    	gps_position(){};
    	gps_position(int d, int m, float s) :
    	degrees(d), minutes(m), seconds(s)
    	{}
    };
    

    non-intrusive mode

    
    namespace boost {
    	namespace serialization {
    
    		template<class Archive>
    		void serialize(Archive & ar, gps_position & g, const unsigned int version)
    		{
    			ar & g.degrees;
    			ar & g.minutes;
    			ar & g.seconds;
    		}
    
    	} // namespace serialization
    } // namespace boost
    

    How does boost impl the 2 modes?

    A: By function overloading. by parameter specialization

    For intrusive mode, following template functions are called

    boost::serialization::access::serialize<boost::archive::text_oarchive,gps_position>(boost::archive::text_oarchive & ar, gps_position & t, const unsigned int file_version);
    

    Note non intrusive mode serialization's priority is always higher than intrusive mode as it is implemented in boost::serialization name space. and it is more "specific"

  • 相关阅读:
    vue-cli(脚手架)学习
    vue-cli(脚手架)
    js时间戳转时间格式
    jQ获取窗口尺寸
    前端加密MD5
    vue项目准备工作(一)
    Oracle数据错删找回
    正则表达式匹配【全角字符】
    数据库分区、分表、分库、分片
    oracle的 分表 详解 -----表分区
  • 原文地址:https://www.cnblogs.com/cutepig/p/12744419.html
Copyright © 2011-2022 走看看