RTTI、反射
前言
说实话,弄清楚这几个概念花了我很长的时间。但是弄清楚这几个概念是非常有必要的,这篇文章是我对这几个概念的总结。
RTTI
RTTI的英文全称是"Runtime Type Identification",它指的是程序在运行的时候才确定需要用到的对象是什么类型的。直观一点来看,举个例子:目前有一个方法可能返回不同类的实例,如何确定返回的到底是什么类呢?这就是所谓的运行的时候才确定类型,也就是所谓的动态多态
。在 C++ 中通过 typeid 和 dynamic_cast 实现了 RTTI。
与动态多态
相对应的就是静态多态
。在 C++ 里静态多态
一般指的是用模版和重载,在编译时就能确定对象类型的多态方法。
RTTI 一般用于确定返回不同的派生类时具体是哪个类。
反射
反射(Reflection)在 Wikipedia 上的定义是:"In computer science, reflection is the ability of a process to examine, introspect, and modify its own structure and behavior"。换而言之,反射赋予某个进程在运行的过程中检查和修改进程本身的功能。
一段程序被编译之后生成的二进制可执行文件在被执行的过程中会被载入到内存的 text 段中,一般来说 text 段是只读的,这也就意味着程序所有的行为会在编译时确定,一旦编译完成就不会更改。然而具体而言,反射提供了让程序在运行时获取类的完整结构信息、创建类、修改类成员变量、调用类方法等等一系列功能。简而言之,通过这一系列的功能,程序能够在运行过程中更为灵活地根据自身需要动态载入、调用各种类。
Java、C#、Go 等语言已经在语言层面支持了反射特性,而 C++ 这种较为保守的语言要使用反射特性就得通过一些奇淫技巧了,而且因为 C++ 没有在语言层面提供返回类的 metadata 的能力,所以很多属性要靠手动注册,这里可以参考RTTR的实现:https://github.com/rttrorg/rttr 。
标签: 无标签
已有 16 条评论
2024年11月29日
你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/W9IrRXniTj.html
回复
2024年12月04日
《大学生士兵的故事》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/40326.html
回复
2024年12月08日
你的文章让我感受到了不一样的风景,谢谢分享。 https://www.4006400989.com/qyvideo/40321.html
回复
2024年12月15日
你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/d1ebID7Mlx.html
回复
1月3日
《蓝精灵第一季》欧美动漫高清在线免费观看:https://www.jgz518.com/xingkong/26047.html
回复
1月6日
哈哈哈,写的太好了https://www.lawjida.com/
回复
2月28日
若能在案例选择上更贴近现实,说服力会进一步提升。
回复
3月1日
创新略显不足,可尝试引入多元视角。
回复
3月2日
全球视野与本土实践结合恰到好处。
回复
3月2日
文笔细腻,描写生动,画面感跃然纸上。
回复
3月2日
文字如刀,剖开表象直抵本质。
回复
3月2日
?总结与建议类?
回复
3月2日
这篇文章提供了宝贵的经验和见解,对读者有很大的启发和帮助。
回复
3月2日
作者以简洁明了的语言,传达了深刻的思想和情感。
回复
3月4日
文字流畅如丝,语言优美动人,读来令人心旷神怡。
回复
3月4日
文章的叙述风格独特,用词精准,让人回味无穷。
回复