C++11 的 运行时类型识别type_info
一、type_info与typeid
类type_info保存关于类型的特定于实现的信息,包括类型的名称,以及比较两个类型是否相等或排序顺序的方法。 这是typeid操作符返回的类。具有如下特点:
(1)这个类的构造函数是private的,因此用户不能直接构造这样的对象,只能通过typeid()函数来获取这个对象.
(2)这个类对外提供了name(),operator==()等方法供用户使用.
(3)typeid()可以对基本的数据类型和对象进行操作,这种情况下,是在编译期静态决定的.
(4)type_info也可以对类类型和类对象进行操作,分两种情况:如果是声明了虚函数的类对象引用,则typeid()返回的是实际对象的类型信息,在运行时动态决定的;反之(没有定义虚函数,或者即使定义了虚函数但传入的是对象指针),则typeid()返回的是入参声明类型信息,在编译时静态决定的.
// type_index example
#include <iostream> // std::cout
#include <typeinfo> // operator typeid
#include <typeindex> // std::type_index
#include <string> int main()
{char a = 'a';short b = 10;int c = 99;long d = 20;float e = 2.3;double f = 4.8;cout << typeid(char).name() << endl;cout << typeid(a).name() << endl;cout << typeid(short).name() << endl;cout << typeid(b).name() << endl;cout << typeid(int).name() << endl;cout << typeid(c).name() << endl;cout << typeid(long).name() << endl;cout << typeid(d).name() << endl;cout << typeid(float).name() << endl;cout << typeid(e).name() << endl;cout << typeid(double).name() << endl;cout << typeid(f).name() << endl;if (typeid(f) == typeid(double)) {cout << "type is equal" << endl;}else {cout << "type is not equal" << endl;}system("pause");return 0;
}
打印
二、type_index
type_index类在头文件<typeindex>
中声明,它是type_info对象的一个封装类,可以用作关联容器(比如map)和无序关联容器(比如unordered_map)的索引。
// type_index example
#include <iostream> // std::cout
#include <typeinfo> // operator typeid
#include <typeindex> // std::type_index
#include <unordered_map> // std::unordered_map
#include <string> typedef struct C {};
int main()
{std::unordered_map<std::type_index, std::string> mytypes;mytypes[typeid(int)] = "Integer type";mytypes[typeid(double)] = "Floating-point type";mytypes[typeid(C)] = "Custom class named C";std::cout << "int: " << mytypes[typeid(int)] << '\n';std::cout << "double: " << mytypes[typeid(double)] << '\n';std::cout << "C: " << mytypes[typeid(C)] << '\n';system("pause");return 0;
}
打印
参考:
std::type_info - cppreference.com
type_index - C++ Reference
C++ type_info简介_weixin_33698043的博客-CSDN博客
C++11 | 运行时类型识别(RTTI)_foruok的博客-CSDN博客_c++11 rtti
C++11 的 运行时类型识别type_info相关推荐
- C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C
C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...
- java 运行时类型_Java基础之RTTI 运行时类型识别
运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...
- 白话C++系列(27) -- RTTI:运行时类型识别
http://www.cnblogs.com/kkdd-2013/p/5601783.html RTTI-运行时类型识别 RTTI:Run-Time Type Identification. 那么RT ...
- c++远征之多态篇——运行时类型识别(RTTI)
以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.RTTI(Run-Time Type Information),运行时类型识别. 涉及typeid.dynamic_cast这两个知识点. R ...
- Java RTTI运行时类型识别
RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作 ...
- MFC六大核心机制之二:运行时类型识别(RTTI)
上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属 ...
- RTTI机制(运行时类型识别)
RTTI机制(运行时类型识别) 在多态里面,基类里的虚函数和派生类里的虚函数形成了遮蔽,这就导致在主程序运行时,有些表达式的类型没有办法确定.必须等到程序运行结束后,根据具体的环境才能确定.看下面的代 ...
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之RTTI运行时类型识别
RTTI(运行时类型识别) 参考文献:深入浅出MFC-侯捷 怎样去构造类别型录网? 一.定义数据结构: 其中pFirstClass指针属于痊愈变量,所以它应该以static修饰之. 而且我们最终希望达 ...
- c++ RTTI(运行时类型识别)
通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型. (2)dynamic_cast:将基类 ...
最新文章
- ROS Gazebo(五):ros_control和gazebo仿真总结
- Diango REST framework 视图继承图
- mysql从innodb转到MyIsam的count查询效率极大提升
- 动态游标(例如表名作为参数)以及动态SQL分析
- [置顶] J2EE (八) 策略模式+装饰模式+反射(java)
- Oracle expdp 导出
- 原生JS转Vue格式的思路
- 设为首页 和 收藏本页
- RapidXml读取并修改XML文件
- IP地址的ABC类划分
- 0x8000FFFF(0X8000FFFF,WPS)
- Mybatis插入大量数据效率对比:foreach插入、SqlSession批量插入、sql插入
- html5 答题器页面,梦幻西游网页版科举答题器答案大全
- QT之调用百度地图离线API
- php邮件回复功能,用PHP回复邮件(Laravel Mailgun)
- Linux防火墙放行gre隧道,防火墙 tunnel(GRE隧道)+×××配置过程分析
- C语言-关键字及其作用
- 解决QT提示No previous extern declaration for non-static variable 'sss'
- 冷酷小叶的Java学习笔记Day3
- C++ 标准库(C++ Standary Library)