RTTI
- RTTI的作用
每个类对象都具有静态类型和动态类型,静态类型在编译的时候就已知,而动态类型在运行的时候才能确定。虽然有虚函数,但是虚函数有其局限性。
实现
RTTI的功能主要由两个运算符来实现,typeid运算符,用于返回表达式的类型。dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针或引用。应用场景
比如一个应用程序中有很多类型的文件,基类为File,并且下面很多派生类,比如文本文件TextFil,多媒体文件MediaFile,这些都是File的派生类。对于相同的功能,如删除,复制等,可以用虚函数实现,但对于不同的功能,如媒体MediaFile应该具有播放等功能,这时就要用到类型识别。如下:
1 | void fun(File* file) |
- type_info类
type_info
类定义在头文件typeinfo中,他没有默认构造函数,并且拷贝构造和移动构造以及赋值运算符都是删除的,因此我们无法定义type_info类的对象,也无法为其赋值,唯一途径就是通过typeid运算符得到。name()
成员函数返回一个表示其类型的c风格字符串。