XPACK库简介
-
核心能力
-
实现C++结构体与JSON/XML/BSON/YAML等格式双向转换
-
支持MySQL/SQLite数据库ORM映射,简化数据持久化操作
-
零依赖头文件库设计,仅需包含头文件即可使用
-
-
高级特性
-
完整STL容器支持(vector/set/map等)及嵌套结构处理
-
提供位域处理、类继承支持、枚举类型转换能力
-
支持自定义编解码扩展机制,满足特殊场景需求
-
通过
XPACK
宏实现非侵入式字段声明(如XPACK(O(name,age))
)
-
-
应用价值
-
简化数据序列化/反序列化流程,提升开发效率
-
宏编程教学典范,展示高阶宏技巧和SFINAE实现方法
-
适用于物联网设备通信、配置文件解析等场景
-
XPACK库git地址
Qt中使用XPACK库
1.使用Qt封装一个结构体与JSON数据,结构体与XML数据互转模块XmlJsonStructExchgMod;
2.使用Qt编写一个测试程序,在测试程序中使用XmlJsonStructExchgMod模块实现数据互转。
模块的对外接口函数
#ifndef XMLJSONSTRUCTEXCHGMOD_H
#define XMLJSONSTRUCTEXCHGMOD_H
#include <QtCore/qglobal.h>
#include "xpack/json.h"
#include "xpack/xml.h"
#include <iostream>
using namespace std;
#if defined(XMLJSONSTRUCTEXCHGMOD_LIBRARY)
# define XMLJSONSTRUCTEXCHGMOD_EXPORT Q_DECL_EXPORT
#else
# define XMLJSONSTRUCTEXCHGMOD_EXPORT Q_DECL_IMPORT
#endif
class XMLJSONSTRUCTEXCHGMOD_EXPORT XmlJsonStructExchgMod
{
public:
XmlJsonStructExchgMod();
~XmlJsonStructExchgMod();
template<class T>
static void JsonToStru(const std::string &data,T &val )
{
xpack::json::decode(data, val);
}
template<class T>
static std::string StruToJson(const T &val)
{
return xpack::json::encode(val);
}
template<class T>
static void XmlToStru(const std::string &data, T &val)
{
xpack::xml::decode(data, val);
}
template<class T>
static std::string StruToXml(const T &val)
{
return xpack::xml::encode(val,"root");
}
};
#endif // XMLJSONSTRUCTEXCHGMOD_H
自定义头文件的XPACK化编写
#ifndef BASE_H
#define BASE_H
#include "xpack/xpack.h"
#include <iostream>
using namespace std;
struct STransmissionBase
{
string id;//消息ID
string name;//消息命令名称
string type="01";//命令类型
int result=0;//命令结果码
XPACK(O(id,name,type,result))
};
template <typename S>
struct STransmission:public STransmissionBase
{
S params;
XPACK(I(STransmissionBase),O(params))
};
struct SLoginResp{
string cuId;
int keepAlivePeriod;
string currentTime;
XPACK(O(cuId,keepAlivePeriod,currentTime))
};
struct SDepURL
{
string id;
string name;
string parentId;
string remark;
XPACK(O(id,name,parentId,remark))
};
struct SGroup
{
vector<SDepURL> URL;
XPACK(O(URL))
};
//登录请求
struct SLoginReq{
string domainId;
string cuUserId;
string cuPassword;
string cuIp;
string cuPort;
string version;
string sysNodeId;
string manufacturerId;
string manufacturerName;
string protocolVersion;
int isFirstLogin;
XPACK(O(domainId,cuUserId, cuPassword,cuIp,cuPort,version,sysNodeId,manufacturerId,manufacturerName,protocolVersion,isFirstLogin))
};
#endif // BASE_H
测试程序中的main函数编写
#include <QCoreApplication>
#include "xmljsonstructexchgmod.h"
#include "base.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SDepURL dep,dep1;
dep.id = "210101";
dep.name ="cam1";
dep.remark = "gun cam";
dep.parentId = "2101";
dep1.id = "210102";
dep1.name ="cam2";
dep1.remark = "ball cam";
dep1.parentId = "2101";
#if 0
STransmission<SGroup> listInfo,listInfo1;
listInfo.id = "0x03030102";
listInfo.name = "getDepList";
listInfo.result = 0;
listInfo.type = "02";
listInfo.params.URL.push_back(dep);
listInfo.params.URL.push_back(dep1);
#else
SGroup group,group1;
group.URL.push_back(dep);
group.URL.push_back(dep1);
#endif
#if 1
string str = XmlJsonStructExchgMod::StruToJson(group);
qDebug() << "json str:" << str.data();
XmlJsonStructExchgMod::JsonToStru(str,group1);
qDebug() << "list size:"<< group1.URL.size();
STransmission<SLoginReq> req;
string str1 ="{\"id\":\"0x03030101\",\"name\":\"CuRegister\",\"type\":\"01\",\"result\":0,\"params\":{\"domainId\":\"210201A001000100\",\"cuUserId\":\"2102013008A09901\",\"cuPassword\":\"202cb962ac59075b964b07152d234b70\",\"cuIp\":\"192.168.22.53\",\"cuPort\":\"11111\",\"version\":\"1.0\",\"sysNodeId\":\"\",\"manufacturerId\":\"\",\"manufacturerName\":\"\",\"protocolVersion\":\"\",\"isFirstLogin\":0}}";
XmlJsonStructExchgMod::JsonToStru(str1,req);
qDebug() << "id:"<< req.id.data() <<" name:"<< req.name.data();
#else
string str = XmlJsonStructExchgMod::StruToXml(group);
qDebug() << "xml str:" << str.data();
XmlJsonStructExchgMod::XmlToStru(str,group1);
qDebug() << "list size:" << group1.URL.size();
#endif
return a.exec();
}
Demo资源链接
https://download.csdn.net/download/kk821521286/90952696