当前位置: 首页 > 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就很酷了,静态和动态反射都是随意的,关键是性能还非常好!

相关文章:

  • 【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析
  • C++之结构体初始化使用总结
  • 边缘微型AI的宿主?—— RISC-V芯片
  • 【教师资格证考试综合素质——法律专项】教师法笔记以及练习题
  • 『大模型笔记』斯坦福大学教授李飞飞在2024年数据与人工智能峰会上的人工智能历史与未来
  • 如何在小程序中实现页面之间的返回
  • [Qt] Qt Creator 编码警告:warning:C4819
  • 彻底卸载SQL Server,步骤
  • 深圳中小企业融资攻略,贷款方法大盘点!
  • 【计算机网络体系结构】计算机网络体系结构实验-www实验
  • Ollama(docker)+ Open Webui(docker)+Comfyui
  • 【机器学习】基于RoBERTa模型的句子嵌入实践
  • Java版-剑指offer数据结构与算法 视频教程 下载
  • stable diffusion 局部重绘 reference-only api 接口调试
  • AI系统进入临床实践的几点考量——DECIDE-AI读后感
  • [nginx文档翻译系列] 控制nginx
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Github访问慢解决办法
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Sublime Text 2/3 绑定Eclipse快捷键
  • webpack项目中使用grunt监听文件变动自动打包编译
  • zookeeper系列(七)实战分布式命名服务
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 初识MongoDB分片
  • 技术发展面试
  • 简单易用的leetcode开发测试工具(npm)
  • 理清楚Vue的结构
  • 目录与文件属性:编写ls
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 学习ES6 变量的解构赋值
  • 移动端解决方案学习记录
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • UI设计初学者应该如何入门?
  • 阿里云API、SDK和CLI应用实践方案
  • "无招胜有招"nbsp;史上最全的互…
  • #07【面试问题整理】嵌入式软件工程师
  • #14vue3生成表单并跳转到外部地址的方式
  • #if和#ifdef区别
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $GOPATH/go.mod exists but should not goland
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (02)vite环境变量配置
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四) Graphivz 颜色选择
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net 使用ajax控件后如何调用前端脚本
  • .NET学习教程二——.net基础定义+VS常用设置