当前位置: 首页 > news >正文

2406c++,iguana动态反射

原文

iguana是一个基于编译期反射序化库,支持从结构序化不同数据格式.

iguana可序化一个C++结构到json,xml,yamlprotobuf格式.这都是通过编译期反射实现的.
现在iguana也支持了动态反射,主要特征:
1,通过对象名创建对象实例
2,取对象所有字段名
3,根据字段名字段值
4,根据字段名字段值
5,序化对象到不同数据格式.

一例来看iguana动态反射函数:

struct pair_t : public iguana::base_impl<pair_t> {pair_t() = default;pair_t(int a, int b) : x(a), y(b) {}int x;int y;
};
REFLECTION(pair_t, x, y);

定义一个从iguana::base_impl继承的结构,后面就可动态反射创建对象了.如果不需要动态反射,只需要静态反射序化,就不必从iguana::base_impl继承了.

auto t = iguana::create_instance("pair_t");
t->set_field_value("x", 12);
t->set_field_value("y", 24);
auto &r0 = t->get_field_value<int>("x");
CHECK(r0 == 12);
auto &r = t->get_field_value<int>("y");
CHECK(r == 24);
//序化到`protobuf`数据格式
std::string str;
t->to_pb(str);
//从`protobuf`格式反序化到`pair_t`
pair_t s;
s.from_pb(str);
CHECK(s.x == 12);
CHECK(s.y == 24);
//序化到`数格`
std::string json;
t->to_json(str);
s = {};
s.from_json(json);
CHECK(s.x == 12);
CHECK(s.y == 24);
//序化到`xml`
std::string xml;
t->to_xml(xml);
s.from_xml(xml);
//序化到`yaml`
std::string yaml;
t->to_yaml(yaml);
s.from_yaml(yaml);

此时iguana就很酷了,静态和动态反射都是随意的,关键是性能还非常好!

http://www.lryc.cn/news/376890.html

相关文章:

  • 干货分享——AB站帮你解决独立站收款难题
  • C++继承与派生
  • Survival Animations
  • Cargo 教程
  • linux中“PXE高效批量装机”
  • emm, ComfyUI的作者从Stability.AI离职了
  • Redis-五种数据结构之列表(ziplist、quicklist)
  • 记一次全设备通杀未授权RCE的挖掘经历
  • 【数据库编程-SQLite3(一)】sqlite3数据库在Windows下的配置及测试
  • YOLOv10改进 | 主干篇 | YOLOv10引入华为VanillaNet替换Backbone
  • C++ 迷宫问题
  • 【Linux】Linux文件系统中主要文件夹列举_作用说明
  • 移植案例与原理 - HDF驱动框架-驱动配置(1)
  • 坚持刷题|反转链表
  • 升级和维护老旧LabVIEW程序
  • sqlite数据库整体迁移进mysql整个流程并解决中文异常问题
  • Hadoop3:MapReduce中的Partition原理及自定义Partition
  • 就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂
  • STM32学习记录(八)————定时器输出PWM及舵机的控制
  • Vue CLI,Vue Router,Vuex
  • 互联网广告相关概念
  • 如何在服务器上部署一个java程序
  • 白酒:中国的酒文化的传承与发扬
  • 算法金 | 再见!!!梯度下降(多图)
  • python Django安装及怎么检测是否安装成功
  • Swift开发——存储属性与计算属性
  • 如何解决input输入时存在浏览器缓存问题?
  • Java基础学习-方法
  • Ribbon与Nginx的区别
  • R包开发详细教程