xpack:C++结构体与多格式数据无缝转换的终极解决方案
【免费下载链接】xpack convert json/xml/bson to c++ struct 项目地址: https://gitcode.com/gh_mirrors/xp/xpack
项目概述
xpack是一款革命性的开源工具库,专门设计用于简化C++结构体与主流数据格式之间的转换。它无需复杂配置,仅需包含头文件即可快速集成到项目中,让数据序列化变得前所未有的简单高效。
核心特性
全格式数据转换支持
xpack提供对JSON、XML、YAML、BSON以及MySQL、SQLite数据库的全面支持,覆盖现代软件开发中的所有主流数据交换需求。
智能容器编码机制
内置对STL容器的原生支持,包括vector、set、list、map等复杂数据结构,确保任何层次的数据都能准确编码和解码。
高级定制化功能
- 位域处理与继承支持
- 枚举类型智能转换
- 自定义编解码逻辑
- 灵活的标志位配置
- 别名系统增强可读性
快速入门指南
基本用法
在结构体定义后使用XPACK宏包含各个变量,然后通过简单的函数调用实现数据转换:
#include <iostream>
#include "xpack/json.h"
using namespace std;
struct User {
int id;
string name;
XPACK(O(id, name));
};
int main() {
User u;
string data = "{\"id\":12345, \"name\":\"xpack\"}";
xpack::json::decode(data, u); // json转结构体
cout<<u.id<<';'<<u.name<<endl;
string json = xpack::json::encode(u); // 结构体转json
cout<<json<<endl;
return 0;
}
容器支持
xpack目前支持下列STL容器:
- vector
- set
- list
- map<string, T>
- map<integer, T> (仅JSON,XML不支持)
- unordered_map<string, T> (需要C++11支持)
- shared_ptr (需要C++11支持)
高级功能详解
FLAG系统
宏XPACK中需要用字母将变量包含起来,支持多种FLAG配置:
- X:包含FLAG配置,格式为X(F(flag1, flag2...), member1, member2,...)
- C:用于自定义编解码函数
- O:等价于X(F(0), ...) 没有任何FLAG
- M:等价于X(F(M),...) 表示这些字段是必须存在的
- A:别名功能,用于变量和key名不一样的情况
- B:位域处理
- I:继承支持
- E:枚举处理
别名功能
用于变量名和key名不一致的场景,支持全局别名和类型别名:
#include <iostream>
#include "xpack/json.h"
using namespace std;
struct Test {
long uid;
string name;
XPACK(A(uid, "id"), O(name));
};
int main() {
Test t;
string json="{\"id\":123, \"name\":\"Pony\"}";
xpack::json::decode(json, t);
cout<<t.uid<<endl;
return 0;
}
位域处理
使用"B"来包含位域变量,位域不支持别名:
#include <iostream>
#include "xpack/json.h"
using namespace std;
struct Test {
short ver:8;
short len:8;
string name;
XPACK(B(F(0), ver, len), O(name));
};
继承支持
使用"I"来包含父类,父类也需要定义XPACK宏:
#include <iostream>
#include "xpack/json.h"
using namespace std;
struct P1 {
string mail;
XPACK(O(mail));
};
struct P2 {
long version;
XPACK(O(version));
};
struct Test:public P1, public P2 {
long uid;
string name;
XPACK(I(P1, P2), O(uid, name));
};
枚举处理
如果编译器支持C++11,枚举可以放在X/O/M/A中,否则需要放在E中:
#include <iostream>
#include "xpack/json.h"
using namespace std;
enum Enum {
X = 0,
Y = 1,
Z = 2,
};
struct Test {
string name;
Enum e;
XPACK(O(name), E(F(0), e));
};
自定义编解码
xpack提供两种自定义编解码方式:xtype和C方法。xtype是类型级别的自定义,C方法支持基本类型和非基本类型,仅作用于用C包含的变量。
第三方类和结构体支持
使用XPACK_OUT而非XPACK来包含变量,XPACK_OUT必须定义在全局命名空间:
#include <sys/time.h>
#include <iostream>
#include "xpack/json.h"
using namespace std;
XPACK_OUT(timeval, O(tv_sec, tv_usec));
struct T {
int a;
string b;
timeval t;
XPACK(O(a, b, t));
};
实际应用示例
JSON与XML编码
xpack支持多种数据格式的编码,以下示例展示如何同时使用JSON和XML编码器:
#include <iostream>
#include "xpack/json.h"
#include "xpack/xml.h"
using namespace std;
int main() {
vector<int> vi(3);
vi[0] = 1;
vi[1] = 2;
vi[2] = 3;
xpack::JsonWriter jw;
xpack::XEncoder<xpack::JsonWriter> je(jw);
xpack::XmlWriter xw;
xpack::XEncoder<xpack::XmlWriter> xe(xw);
je.ob(NULL).add("vv", vi).add("i",10).add("s","hello").oe();
xe.ob("root").add("vv", vi).add("i",10).add("s","hello").oe();
cout<<je.String()<<endl;
cout<<xe.String()<<endl;
return 0;
}
核心优势
极简集成体验 - 头文件即用,零依赖部署 全面格式覆盖 - 六大主流格式,一站式解决方案 深度定制能力 - 从基础到高级,满足所有定制需求 复杂结构支持 - 任意嵌套容器,轻松应对 高性能表现 - 轻量级设计,极致运行效率
项目特点总结
- 极简集成:仅仅包含头文件,易于集成到现有工程中
- 广泛格式支持:涵盖常见数据交换格式和数据库访问,适用范围广
- 高度可定制性:通过宏定义和FLAG实现个性化编码逻辑调整
- 容器友好:全面支持STL容器,简化复杂数据结构的操作
- 精细控制:提供深入至数据项的编码控制,满足精细化管理需求
通过xpack,开发者可以专注于业务逻辑而非数据格式转换的细节,真正实现高效、优雅的编程体验。无论是初学者还是资深工程师,都能从中获得显著的开发效率提升。
【免费下载链接】xpack convert json/xml/bson to c++ struct 项目地址: https://gitcode.com/gh_mirrors/xp/xpack
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



