網頁

2019年2月9日 星期六

安裝cereal

cereal是一個header-only C ++ 11序列化函式庫。 cereal採用任意數據類型並可逆地將它們轉換為不同的表示形式,例如compact binary encodings,XML或JSON。 cereal被設計為快速,重量輕,易於擴展 - 它沒有外部依賴性,可以很容易地與其他代碼捆綁或獨立使用。


http://uscilab.github.io/cereal/index.html
右上角點download到家目錄

$ tar -xvf v1.2.2.tar.gz

$ sudo cp -r ~/cereal/include /usr/include

$ g++ -std=c++11 cereal.cpp

cereal.cpp
#include <cereal/types/unordered_map.hpp>
#include <cereal/types/memory.hpp>
#include <cereal/archives/binary.hpp>
#include <fstream>
    
struct MyRecord
{
  uint8_t x, y;
  float z;
  
  template <class Archive>
  void serialize( Archive & ar )
  {
    ar( x, y, z );
  }
};
    
struct SomeData
{
  int32_t id;
  std::shared_ptr<std::unordered_map<uint32_t, MyRecord>> data;
  
  template <class Archive>
  void save( Archive & ar ) const
  {
    ar( data );
  }
      
  template <class Archive>
  void load( Archive & ar )
  {
    static int32_t idGen = 0;
    id = idGen++;
    ar( data );
  }
};

int main()
{
  std::ofstream os("out.cereal", std::ios::binary);
  cereal::BinaryOutputArchive archive( os );

  SomeData myData;
  archive( myData );

  return 0;
}

沒有留言:

張貼留言