1. 程式人生 > >CVPR|OpenCV|影象檢索|視訊檢索

CVPR|OpenCV|影象檢索|視訊檢索

  • 例3———Non Intrusion Version
    • 現有一個Plant類,宣告和定義如下:
    • Plant.h
    • class Plant 
      {
      public:
      	Plant() ;
      	Plant(int _age, std::string _name) ;
      	~Plant() ;
      
      
      	void addScore(const float _score) ;
      
      public:
      
      	void setScore(const std::vector<float> _scoreVct) ;
      	std::vector<float> getScore() const ; 
      	
      	int m_age ;
      	std::string m_name ;
      
      private:
      	std::vector<float> m_score ;
      
      };
    • Plant.cpp
      Plant::Plant()
      {
      	m_age = 0 ;
      	m_name = "name" ;
      
      }
      
      Plant::~Plant()
      {
      	if (m_score.size() > 0)
      	{
      		m_score.clear() ;
      	}
      }
      
      
      Plant::Plant(int _age, std::string _name):m_age(_age), m_name(_name)
      {
      
      }
      
      
      void Plant::addScore(const float _score)
      {
      	m_score.push_back(_score) ;
      }
      
      
      
      
      void Plant::setScore(const std::vector<float> _scoreVct) 
      {
      	m_score = _scoreVct ;
      }
      
      
      
      std::vector<float> Plant::getScore() const 
      {
      	return m_score ;
      }
      

    • 序列化後的Plant類:
    • Plant.h
    • class Plant 
      {
      public:
      	Plant() ;
      	Plant(int _age, std::string _name) ;
      	~Plant() ;
      
      
      	void addScore(const float _score) ;
      
      public:
      
      	void setScore(const std::vector<float> _scoreVct) ;
      	std::vector<float> getScore() const ; 
      	
      	int m_age ;
      	std::string m_name ;
      
      private:
      	std::vector<float> m_score ;
      
      };
      
      // 通過該巨集,將序列化分為:load 和 save
      // 這樣的好處在於:load 和 save 兩個函式可以編寫不同程式碼
      // 而前面兩個例子中的serialize函式即充當load,又充當save
      
      BOOST_SERIALIZATION_SPLIT_FREE(Plant) namespace boost { namespace serialization { template<class Archive> void save(Archive & ar, const Plant & plant, const unsigned int version) { ar & plant.m_age ; ar & plant.m_name ; // 通過公共函式來獲取私有成員變數 std::vector<float> scores(plant.getScore()); ar & scores ; } template<class Archive> void load(Archive & ar, Plant & plant, const unsigned int version) { ar & plant.m_age ; ar & plant.m_name ; // 通過公共函式來設定私有成員變數 std::vector<float> scores ; ar & scores ; plant.setScore(scores) ; } } }

    • 測試程式: