首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Boost Serialize -以自定义方式序列化数据

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

Stack Overflow用户
提问于 2010-10-14 16:51:37
回答 1查看 2.1K关注 0票数 4

如果我使用Boost Serialization来序列化一个Integer:

代码语言:javascript
复制
#include <boost/archive/text_oarchive.hpp> 
#include <iostream> 

int main() 
{ 
  boost::archive::text_oarchive oa(std::cout); 
  int i = 1; 
  oa << i; 
}

结果如下所示:

22 serialization::archive 5 1

现在我很好奇是否以及如何改变这种方式,某些数据是序列化的。不需要对数据进行反序列化,因此如果不能再进行反序列化,也不会成为不进行反序列化的障碍。

假设上面的代码应该创建以下输出:

integer 11

(添加整型字,值增加10,不会集成archive-header。)

这可能吗?如何才能做到这一点?Boost Serialization能够让用户在不修改序列化代码库的情况下做到这一点吗?

PS:

上面的示例代码是从Highscore-Tutorial复制的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-25 04:44:56

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

代码语言:javascript
复制
#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){};
};

(改编自the documentation)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3931535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档