CAPABILITIES
围绕你的业务,组织数据能力。
从字段声明到对象还原,围绕真实的数据结构构建。
声明式类型注册
注册自定义结构、QObject 派生类型、枚举及访问器字段;支持字段描述与声明、实现分离。
ELA_BEGIN_META · ELA_FIELDSXML 与二进制
XML 适合检查配置;二进制适合数据存储与传输,并可按调用选择 LZ4 压缩。
serialize · serializeToByteQt 与 STL 容器
支持字符串、日期时间、几何等类型,以及顺序容器、集合、映射、元组的递归处理。
QString · QList · std::vector继承与多态
注册继承字段,通过裸指针、标准或 Qt 共享指针保存并恢复已注册的实际派生类型。
std::shared_ptr · QSharedPointer统一数据包装
ElaVariant 包装值与不同所有权形式的指针,为序列化、网络和录制提供共同数据载体。
ElaVariant性能优势
在当前同等基准测试条件下,性能较 Protobuf 提升约 6%。
当前基准结果;实际表现随数据模型、数据规模与运行环境变化。C++ / QT · CODE EXAMPLES
一份结构,两种数据表达。
同一份业务结构,同时用于 XML 与 LZ4 二进制序列化。
序列化与还原 · C++14
auto* metaType = ElaMetaType::getInstance();
ElaDeviceState state;
const QString xml = metaType->serialize(state);
const auto fromXml = metaType->deserialize<ElaDeviceState>(xml);
// true 开启 LZ4 压缩,读取时自动识别。
const QByteArray bytes = metaType->serializeToByte(state, true);
const auto fromBytes = metaType->deserializeFromByte<ElaDeviceState>(bytes);类型注册 · C++14
struct ElaDeviceState {
int deviceId{1}; // 设备标识。
double temperature{25.0}; // 温度,单位摄氏度。
};
ELA_BEGIN_META(ElaDeviceState)
ELA_FIELDS(deviceId, temperature)
ELA_END_META()API 用法片段,省略工程初始化与错误处理,仅展示核心功能。
WHERE IT FITS
把能力带入实际场景。
配置与工程文件
将层次化的配置结构写入可读 XML,统一保存与恢复入口。
业务对象持久化
把嵌套结构和容器转换为二进制数据,保留业务类型组织方式。
复杂实体模型
在已注册的继承体系中处理多态对象,与网络、录制组件共用类型模型。
INTEGRATION NOTES
接入之前,了解这些细节。
图像走二进制路径
QImage 与 QPixmap 使用 serializeToByte / deserializeFromByte,不应通过 XML 序列化。
多态需要注册类型
多态还原依赖类型注册与继承关系;通过指针传递对象,避免按值传递造成派生信息丢失。
按业务选择压缩
LZ4 可在二进制写入时启用,读取端自动识别。是否使用压缩,应结合数据大小与应用场景决定。
Liniyous · Ela 开发者
QQ80985
微信liniyous
ElaMetaType 为付费项目;具体授权以沟通确认为准。