您好,登录后才能下订单哦!
本篇文章为大家展示了C++中怎么操作RTTI,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
一、RTTI典型的应用需求
1、类型的识别,即能在运行时判断出某对象、表达式等的类型,能判断它们是基本类型(int、string),还是对象,以及它们区别于其它类型的标识;
2、对象的继承关系的运行时判断;
3、在出错处理、内存诊断等处理时的输出信息;
4、基于字符型名称的运行时对象访问、方法调用;
5、对象的自动保存和读入;
6、基于ID或名称的对象自动生成;
7、环境配置的保存和读入;
8、程序自动生成;
二、C++实现RTTI
RTTI最直接的实现是通过编程语言的语法支持功能,由编译器自动完成,比如:Delphi等语言就提供了Property关键字。C++语言没有这些语法支持功能,因为C++不是一种RAD语言,可以将VB、Delphi、Java等与之进行对比。C++的RTTI是最简单的,只能获得类名和相关的继承信息;而VB、Delphi、Java等确复杂得多,甚至于支持属性名、方法名、事件名等。
标准C++ 提供了typeid() 操作,以得到类型信息,它的参数可以是一个表达式,可以是一个对象、指针或者引用,通过这个方法,可以得到一个指向常type_info对象,里面包含了这个表达式的类型必要的信息。type_info对象提供的功能有如下这些:
1、name(),可以得到一个包含类型信息的字符串,返回如:"int"、"MyClass"等;
2、before(),用来在类型列表中遍历;
3、==操作,用来判断类型是否相同;
VC中的MFC提供的RTTI实现与C++提供的差不多,但是有一些功能上和实现在的差别,但也只是提供了名称和比较功能。
不能说,这是C++或VC中的缺陷,这是由C++的定位决定了,如果C++加上了复杂的RTTI信息,则C++可能就变成了C#或别的什么语言了。是的,C#增加了比较复杂的RTTI信息,谁让他的主设计者就是从Borland公司过去的呢(这也决定了C++在.NET框架中的会被淘汰的命运,因为它在.NET中没有合适的定位,就象VF被淘汰一样)。
上述内容就是C++中怎么操作RTTI,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。