`
febird
  • 浏览: 254235 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

最便捷、最强大、速度最快的C++序列化框架

阅读更多

最便捷、最强大、速度最快的C++序列化框架。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ?> 

特别注意:vc6太古老,不符合C++规范,无法使用该框架

 

1.         高性能,速度非常快,比你能找到的同类产品至少快一个数量级

2.         在网络通讯,数据库存储中非常好用。

3.         预先支持所有基本类型,所有stl容器类型(除stack/queue之外)

4.         支持变长int32/uint32/int64/uint64

5.         支持stl::pairboost::tuple

6.         可选的版本控制,而非强制

a)         对于小对象,通常不需要版本控制

b)         boost::serialization的版本号是强制的,当初我设计这个序列化框架就是因为boost不能省略版本号

7.         非侵入式设计,不污染名字空间

8.         声明式语法,简单,可靠

9.         …….

 

该框架的易用性

还是用代码说明问题最简洁,看这个例子:

 

struct MyData1

{

    int  a, b, c;

    var_int32_t d;  // d.t is int32 value

    var_uint64_t e; // d.t is uint64 value

    std::string f;

    std::map<std::string, int> g;

    std::set<int> h;

 

    // 声明序列化,无版本控制,最简洁的声明,后面几个稍微复杂点

    DATA_IO_LOAD_SAVE(MyData1, &a&b&c&d&e&f&g&h)

};

 

struct MyData2

{

    int  a, b, c;

    var_int32_t d;

    var_uint64_t e;

    std::string f;

    std::map<std::string, int> g;

    std::set<int> h;

 

    // 声明序列化,有版本控制

    DATA_IO_LOAD_SAVE_V(MyData2,

        1, // 当前版本

        &a&b&c&d&e&f&g&h

        )

};

 

struct MyData3

{

    int  a, b, c;

    boost::int32_t d;

    boost::uint64_t e;

    std::string f;

    std::map<std::string, int> g;

    std::set<int> h;

    std::multiset<int> i;

 

    unsigned version;

 

    // 声明序列化,有版本控制

    DATA_IO_LOAD_SAVE_V(MyData3,

        2, // 当前版本

        &a

        &b

        &c

        &as_var_int(d) // d 声明为int32_t, 但是作为var_int32_t 来存储

        &as_var_int(e) // e 声明为uint64_t, 但是作为var_uint64_t 来存储

        &f

        &g

        &h

        &vmg.since(2, i) // 版本2 新增了成员i

        &vmg.get_version(version) // 如果需要,将版本值存入version 成员

        )

};

 

int main(int argc, char* argv[])

{

    PortableDataOutput<AutoGrownMemIO> output;

    PortableDataInput<MemIO> input;

 

    output.resize(1024COLOR:

分享到:
评论

相关推荐

    protobuf C++库

    Protocol Buffers(简称protobuf)是由Google开发的一种高效、灵活的数据序列化框架,类似于XML和JSON,但比它们更小、更快、更简单。它允许开发者定义数据结构,然后生成能够在各种语言(包括C++、Java、Python等)...

    Windows-MFC程序-07.MFC序列化机制和序列化类对象

    `CObject`是所有MFC类的基类,它提供了序列化的基本框架;`CFile`类则代表一个磁盘文件,用于读写操作。 1. **继承自CObject** 要使一个类支持序列化,首先需要让它继承自`CObject`。`CObject`提供了一个纯虚函数`...

    Hikyuu 2.0.3 基于c++/python 高性能量化回测框架 C++ 帮助文档

    这个框架的独特之处在于它结合了C++的高效性和Python的易用性,使得量化策略的开发和测试变得更为便捷。本文将深入探讨Hikyuu 2.0.3版本的C++帮助文档,帮助读者理解并掌握其核心概念和技术。 一、Hikyuu框架简介 ...

    Flare是广泛投产于腾讯广告后台的现代化C++开发框架,包含了基础库、RPC、各种客户端等 主要特点为易用性强、长尾延迟低

    Flare是腾讯广告后台的核心开发框架,专为C++编程设计,旨在提供高效、便捷的开发体验。这个框架集成了多种关键组件,如基础库、远程过程调用(RPC)框架以及各种客户端工具,旨在满足大规模分布式系统的需求。在...

    一个简易服务器框架

    总结来说,这个简易服务器框架结合了Windows平台的优势、libevent的高效事件处理、protobuf的序列化能力以及C++11的现代编程特性,为开发者提供了一个快速开发网络服务的起点。通过理解这些关键技术,开发者可以更好...

    POCO C++(中文说明文档).rar

    它类似于Java类库、.Net框架以及Apple的Cocoa,提供了丰富的功能,使得用C++进行现代网络编程变得更加便捷。POCO C++库基于标准的ANSI/ISO C++,充分利用了STL(Standard Template Library)的优势,确保了代码的...

    protobuf协议最全资源,拿走不谢

    总结起来,protobuf是一种强大的数据序列化工具,被广泛应用于各种场景,尤其在C++开发中。这个压缩包可能包含了protobuf的完整源码、开发文档和示例,对于学习和使用protobuf的开发者来说是一份宝贵的资源。通过...

    c++实现的股市软件

    此外,序列化库如Boost.Serialization可以帮助将数据持久化到文件中。 3. **技术分析图表**:这需要图形用户界面(GUI)支持。Qt库是C++中常用的选择,它可以创建丰富的图形元素,并支持绘制图表,用于展示股票K线...

    58到家分布式服务框架.pptx

    4. 序列化协议(DSF Serialization):使用四元组(类型、对象总字节长度、对象属性序号、对象属性值)实现跨语言、跨平台序列化。 DSF的主要特点包括: 1. 高可用性:支持多节点部署、健康检查、过载丢弃、服务...

    C++ 拼音输入法

    在IT领域,C++是一种强大的、面向对象的编程语言,被广泛用于开发系统软件、游戏引擎、嵌入式系统以及各种复杂应用。本项目“C++拼音输入法”旨在利用C++来创建一个汉字拼音输入法系统,为用户提供便捷的汉字输入...

    基于c++图书销售系统

    C++标准库提供了fstream类来读写文件,开发者需要理解文件流的概念,知道如何打开、关闭文件,以及如何序列化和反序列化数据。 六、错误处理与调试 在开发过程中,良好的错误处理机制至关重要。C++支持异常处理,...

    trt c++ 正向推理入门,包含tensorrt6和7的示例

    6. 序列化和反序列化:为节省内存和加快加载速度,可以将`ICudaEngine`序列化到文件,需要时再反序列化。 7. 创建执行上下文:从引擎创建`IExecutionContext`,这是实际运行推理的地方。 8. 分配输入/输出内存:分配...

    Visual+C++网络通信编程实用案例精选》配套源码

    C++提供了多种库(如Boost.Serialization、Protocol Buffers等)来帮助处理数据序列化和反序列化。 6. **错误处理与调试**:网络通信中常遇到的错误包括连接失败、数据传输错误等。C++程序员需要学会正确处理这些...

    gSOAP C/C++ 开发WebService

    只需提供一个接口定义文件(.xsd或.wsdl),`soapcpp2`就能生成相应的数据结构、序列化/反序列化函数以及服务接口。 3. **数据类型映射**:gSOAP支持标准C/C++数据类型以及自定义数据类型的映射到XML。通过使用`...

    C++MFC游戏 PLUS

    在MFC框架下,C++可以便捷地创建窗口、菜单、控件等用户界面元素,同时处理各种系统事件,如键盘输入和鼠标点击。 MFC库提供了一系列的类,简化了Windows API的使用,使得开发者可以更专注于游戏逻辑的实现,而不是...

    opengl序列图(QT,C++)源码.zip

    C++是它们之间的编程语言,提供了面向对象的特性,使得开发复杂的图形应用变得更加便捷。 这个“opengl序列图(QT,C++)源码.zip”文件包含了一套使用OpenGL、QT和C++编写的源代码,可能是一个示例项目或教程,用于...

    Visual C++ MFC 编程实例教程

    `CArchive`类尤其有用,它允许以序列化的方式保存和加载对象状态,从而实现持久化存储。 网络编程方面,MFC包含了`CSocket`类,用于实现TCP/IP通信。通过创建和连接套接字,开发者可以构建客户端-服务器应用程序。 ...

    DSF分布式服务框架设计PPT学习教案.pptx

    总的来说,DSF分布式服务框架是为了解决复杂分布式环境中的服务治理问题而设计的,它通过统一的框架、高效的服务调用机制、强大的高可用性和安全性措施,以及便捷的运维部署,为企业构建大规模分布式系统提供了有力...

    通讯录程序,用Visual C++ 6.0编写

    Visual C++ 6.0是一款强大的Windows应用程序开发工具,它集成了编译器、调试器以及丰富的类库,为开发者提供了高效便捷的编程环境。 一、项目初始化与界面设计 首先,我们需要在Visual C++ 6.0中创建一个新的MFC...

    C++的qt聊天案例

    Qt是一个跨平台的开发框架,它提供了丰富的API,使得开发者可以便捷地构建功能强大的、具有现代感的用户界面。本案例中,我们将会探讨如何使用C++和Qt来实现一个简单的聊天应用,名为MyQQ。 首先,Qt库提供了一系列...

Global site tag (gtag.js) - Google Analytics