c++ so 反射_c++如何实现反射功能?

问题主 和 @vczh 可以看下我这样弄,是否符合要求?

定义类的时候稍微傻一点,但是他既不要求pod, 也没有什么侵入式的基类要求。甚至还允许你把成员定义成private的。连C++11都不需要。

struct test_type0{

DEF_FIELD_BEGIN(test_type0)

private:

DEF_FIELD(int, x)

public:

DEF_FIELD(std::string, y)

DEF_FIELD_END

};

struct test_type1{

DEF_FIELD_BEGIN(test_type1)

DEF_FIELD(test_type0, z)

DEF_FIELD(std::string, w)

DEF_FIELD_END

};

然后就可以用functor去遍历这些类实例的成员了。目前支持仅传成员,传成员+成员的名字,传成员+成员的名字+成员的深度(这样就可以把结构体转换成json或者xml了)3种参数类型的functor。例子里头有详细的介绍。

容器类型怎么办?。。肯定在你functor里面自己遍历啦,容器自己都是支持遍历的嘛,好傻的问题咯。

核心技术其实就是如何给成员计数,如何把成员转换成整数吧。用了一个过去boost::typeof的技巧。

为了你这个问题,我牺牲了午睡给你写了个github项目(其实主要是把我另外一个项目里面的部分功能给抽离了出来yuanzhubi/raw_buffer),问题主你看是否该给我点个赞?完全不需要什么CLR来支持。

除了没法支持遍历父类的数据成员之外,应该是足够了。你看下测试用例 是否已经覆盖够了你的要求。目前就支持深度优先遍历。

通过gcc4.5, vs2008测试。 header only, C++03 only。 性能和你手写遍历成员是一模一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱简史:从1950到2019

来源:专知 地址:http://knowledgegraph.today/paper.html 作者 | Claudio Gutierrez 、 Juan F. Sequeda 编译 | Xiaowen 目录: 知识图谱可以被认为是实现计算机科学的早期愿景,即创建能够大规模集成知识和数据的智能系统。“知识…

easyui ajax post,EasyUI框架 使用Ajax提交注册信息的实现代码

EasyUI框架 使用Ajax提交注册信息的实现代码一、服务器代码:ControllerScope("prototype")public class StudentAction extends BaseAction {private static final long serialVersionUID -2612140283476148779L;private Logger logger Logger.getLogge…

PHP文件缓存实现

有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务。这时候,文件缓存会是一个不错的选择。 我们需要文件缓存实现哪些功能: 功能实现:get、set、has、increment、decrement、delete、flush 能够在较短…

影响计算机算法世界的十位大师(上)

来源:数学职业家1、伟大的智者——Don E.Knuth,中文名:高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来,不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》更是被誉为算法中…

echars显示折点数据_数据可视化的基础语法

数据可视化的基础语法可视化主要是以图像来展示数据间的关系,常见的图形种类有折线图,散点图,条形图,直方图,饼图。此外在接下来课程中还会用到箱线图,热力图,蜘蛛图,表示二元变量分布和成对关系的视图。今…

ajax 输入不为空,ajax POST响应为空

尝试通过单击按钮发布数据,但作为响应,PHP脚本中将其显示为空这是html这是jqueryvar action 1;$("input").on("click", sendData);function sendData() {if ( action 1 ) {$("#btn").css("background", "…

cad快捷键文件路径_办公格式转太难不会看这里!CAD、PDF、Word、Excel、TXT教你玩转...

办公格式转,你遇到最难解决的问题是哪些?办公格式转,最让你头疼的文件格式是哪些?办公格式转,你最想要学习转换格式有哪些?我:Word、Excel、PPT、TXT、CAD、PDF、JPG统统都想要进行解决&#xf…

80x86汇编—分支循环程序设计

文章目录 查表法: 实现16进制数转ASCII码显示计算AX的绝对值判断有无实根地址表形成多分支从100,99,...,2,1倒序累加输入一个字符,然后输出它的二进制数大小写转换大写转小写小写转大写 冒泡排序剔除空格 查表法: 实现16进制数转ASCII码显示 题目要求: …

jquery 获取键值对中最大值_jquery属性的操作

HTML示例代码:第一个标题家用电器分类家用电器价格11男:女:第一行第二行第三行第四行第二个标题第一段第二段属性:attr(n|k,v|p|f):设置或返回被选属性的值name:返回所有所选属性的值key,value:以键值对的方式设置所有所选属性的值properties…

python怎么一直循环_python 基础之while无限循环

用户登录程序 username "chenxi" passwed "testki" counter 0 while counter < 3: # 测试3次 user input("输入用户名&#xff1a;") passw input("输入密码&#xff1a;") if user username and passw passwed : print(&qu…

织梦服务器系统win10,WIN服务器爆破DEDECMS后台目录

利用脚本python&#xff1a;#!/usr/bin/env python/** author Mochazz* team 红日安全团队* env pyton3**/import requestsimport itertoolscharacters "abcdefghijklmnopqrstuvwxyz0123456789_!#"back_dir ""flag 0url "http://192.168.1.9/t…

人工智能技术对专利制度的挑战与应对

来源&#xff1a;上海市法学会内容摘要人工智能技术作为人类的一项发明创造&#xff0c;本身具备了一定的创造力。无论是专利法治实践还是理论研究均无法否认&#xff0c;在弱人工智能时代&#xff0c;人工智能技术兼具发明创造工具和发明创造方案的提供者的双重身份。由此导致…

java.lang.UnsupportedClassVersionError: Bad version number in .class file异常

java.lang.UnsupportedClassVersionError: Bad version number in .class file异常 部署工程时也出现过因为版本不同引起的问题&#xff0c;那时我们用的IDE的编译器是JDK5.0&#xff0c;而那台Linux装的是JDK6.0&#xff0c;部署后发现很多功能都出错&#xff0c;看来有些东西…

网络推广恶意点击js_做好网络推广,是做好网络营销的必要条件

互联网社会里网络无处不在&#xff0c;商机无处不在&#xff0c;企业通过网络营销&#xff0c;能有效的避免线下竞争激烈的市场&#xff0c;做好网络推广&#xff0c;是做好网络营销的必要条件。一个优秀的网络推广团队不但能实现提高企业的知名度的目的&#xff0c;还能帮助企…

css盒子模型_css的盒子模型是什么

CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型。css盒子模型又称为框模型 (Box Model) &#xff0c;包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素组成了盒子模型。图中最内部的框是元素的实际内容&#xff0c;也就是…

ajax实现重新绘图,如何画Flot AJAX更新图

在上一章我们提到了如何画实时更新图,而这一章就要教你们如何利用AJAX去后端抓数据回来做实时更新图.系统负载实时更新图(AJAX)我们直接拿上一章的范例来做修改,在这里只说明有修改到的部份,有任何不清楚的地方,你也可以随时回到上一章去查看.准备资料首先,因为我们画的是系统负…

6G应用场景有哪些?首份6G报告给你揭晓

来源&#xff1a; 5G产业圈导 读中国移动研究院无线与终端技术研究所所长丁海煜介绍称&#xff0c;按照移动通信产业“使用一代、建设一代、研发一代”的发展节奏&#xff0c;业界预期6G将于2030年左右实现商用。“创新、协调、绿色、开放、共享”应成为5G向6G演进的新发展理念…

linux python 图形界面开发_python在linux制作图形界面(snack)

snack是一个用于在linux制作图形界面&#xff08;GUI&#xff09;的模块&#xff0c;该模块由c编写&#xff0c;而且redhat的系统都自带这个模块。 1.获取模块 虽然redhat系统会自带这个模块&#xff0c;但是直接去import snack会提示找不到模块&#xff0c;一个原因是我们重装…

虚拟搭建局域网模拟器_巧用虚拟局域网,快速搭建私有云,一步就能搞定

前段时间公司一直在使用局域网来进行文件共享&#xff0c;用一台电脑把某个文件夹在局域网里共享出来&#xff0c;其他电脑远程访问&#xff0c;但是这样使用太麻烦&#xff0c;要是主电脑忘记开机&#xff0c;其它人就用不了。再就是&#xff0c;一旦离开公司之后&#xff0c;…

云服务器cvm只能弄网站么,云服务器cvm与建站主机区别

因此&#xff0c;云服务器cvm与建站主机的区别&#xff0c;其实也就是云服务器与虚拟主机之间的区别。安全可靠性云服务器cvm基于新型的虚拟主机现也位于云技术平台&#xff0c;安全稳定性较强。不过&#xff0c;由于CPU、带宽或IP等资源与其他空间共享&#xff0c;性能方面还是…