C++ Boost Serialize-以自定义方式序列化数据

C++ Boost Serialize-以自定义方式序列化数据,c++,serialization,boost,C++,Serialization,Boost,如果我使用Boost序列化来序列化整数: #include <boost/archive/text_oarchive.hpp> #include <iostream> int main() { boost::archive::text_oarchive oa(std::cout); int i = 1; oa << i; } #包括 #包括 int main() { boost::archive::text\u oarchive

如果我使用Boost序列化来序列化整数:

#include <boost/archive/text_oarchive.hpp> 
#include <iostream> 

int main() 
{ 
  boost::archive::text_oarchive oa(std::cout); 
  int i = 1; 
  oa << i; 
}
#包括
#包括
int main()
{ 
boost::archive::text\u oarchive oa(std::cout);
int i=1;

oa您可以编写自己的归档文件,如下所示:

#include <cstddef> // std::size_t
#include <string>
#include <typeid>

template <typename T>
std::string printName() {
  // Unmangle for your platform or just specialise for types you care about:
  return typeid(T).name();
}

//////////////////////////////////////////////////////////////
// class trivial_oarchive
class trivial_oarchive {
public:
    //////////////////////////////////////////////////////////
    // public interface used by programs that use the
    // serialization library
    typedef boost::mpl::bool_<true> is_saving; 
    typedef boost::mpl::bool_<false> is_loading;
    template<class T> register_type(){}
    template<class T> trivial_oarchive & operator<<(const T & t){
        return *this;
    }
    template<class T> trivial_oarchive & operator&(const T & t){
        // No idea why you'd want to add 10, but this does it:
        return *this << printName<T>() << " " << (t+10);
    }
    void save_binary(void *address, std::size_t count){};
};
#包括//std::size\t
#包括
#包括
模板
std::string printName(){
//为您的平台解开束缚,或只专注于您关心的类型:
返回typeid(T.name();
}
//////////////////////////////////////////////////////////////
//类琐碎的
类琐碎的{
公众:
//////////////////////////////////////////////////////////
//由使用
//序列化库
typedef boost::mpl::bool_u正在保存;
typedef boost::mpl::bool_uu正在加载;
模板寄存器类型(){}

模板琐碎\u oarchive&operator如果不需要反序列化,序列化的目的是什么?另一个应用程序将反序列化数据。此应用程序需要特定格式的数据,我希望使用Boost serialize进行序列化。其思想是,用户以后可以选择几种序列化方式(根据他想要发送到的应用程序)。开发人员只需要实现一个序列化方法。但我目前正在设计和测试该概念的工作原理。我明白了。您可以指示Boost.Serialization不要添加像
22 Serialization::archive
这样的头文件,并且您可以创建自己的存档文件,以您希望的格式写入数据。或者根据需要编写如果将y转换为预定义格式,您可能会发现它很有用?谢谢您的指针,我会记住它。