首页 > 其他分享 >RTTI

RTTI

时间:2024-08-22 14:26:33浏览次数:12  
标签:typeid Superb cast bad RTTI class 指针

class Grand{};
class Superb:public Grand{};
class Magnificent:public Superb{};

Superb *pm=dynamic_cast<Superb *>pg;
如果类型转换成功返回Superb指针,不成功返回0
2.引用的动态转换。
引用不回产生空,但动态转换失败会抛出bad_cast异常

include

try{
Superb & rs=dynamic_cast<Superb &>(rg);
}catch(bad_cast &){
...
}
3.typeid操作符和type_info类
typeid用来检测两个对象是否是同一类型
type_info定义在typeinfo头文件内,重载了和!=操作符用来比对类型。
typeid(Magnificient)
typeid(pg);
对比类和指针指向的对象是否是同一类型的。如果pg指向空,会扔出bad_typeid异常,该异常类型继承于exception类,定义在typeinfo头文件中。
cout<<"Now processing type "<<typeid(
pg).name()<<".\n";
输出指针指向的对象的类名。调用name()方法

标签:typeid,Superb,cast,bad,RTTI,class,指针
From: https://www.cnblogs.com/zhongta/p/18373775

相关文章

  • 【C++】typeid与RTTI
    1、简介注意:typeid是操作符,不是函数。这点与sizeof类似)运行时获知变量类型名称,可以使用typeid(变量).name()需要注意不是所有编译器都输出”int”、”float”等之类的名称,对于这类的编译器可以这样使用。intia=3;if(typeid(ia)==typeid(int)){cout<<"int"<<e......
  • fpc 3.3.1使用rtti
    生产不建议使用fpc3.3.1(Trunk)近日QQ群的SunGod和啊D等发现fpc3.3.1(Trunk)添加了和delphi一样的rtti功能,但fpc默认是没启用的。启用RTTI的条件:1、编译FPC时添加-dENABLE_DELPHI_RTTI2、在fpc.cfg最后一行添加-dENABLE_DELPHI_RTTI因编译fpc对我来说还是太麻烦,我喜欢用fpcudelu......
  • C++ RTTI
    1.背景RTTI的英文全称是"RuntimeTypeIdentification",中文称为"运行时类型识别",它指的是程序在运行的时候才确定需要用到的对象是什么类型的。用于在运行时(而不是编译时)获取有关对象的信息。在C++中,由于存在多态行为,基类指针或者引用指向一个派生类,而其指向的真正类型,在编译阶......
  • Qt 多线程中使用QTimer和信号、槽 QObject::startTimer: Timers cannot be started fr
    多线程中使用QTimer我们可能在Qt的多线程中使用QTimer中都会遇到一个错误:Cannotcreatechildrenforaparentthatisinadifferentthread.或者QObject::startTimer:TimerscannotbestartedfromanotherthreadQTimer定时器不能在不同的线程中启动。出现这个主要原因......
  • [C++ 从入门到精通] 16.RTTI、dynamic_cast、typeid、虚函数表
    文章预览:一.RTTI是什么二.dynamic_cast类型(指针/引用)转换2.1C风格的强制类型转换2.2指针转换(常见用法)2.3引用转换三.typeid运算符四.type_info类五.RTTI与虚函数表一.RTTI是什么RTTI(Run-TimeTypeIdentification):通过运行时类型信息,程序能够使用基类的指针或引用来检查......
  • C++中的RTTI机制、多继承中的虚函数
    C++中的RTTI机制基类有虚函数时才能实现RTTI机制:基类无虚函数时,typeid(*pA)返回的是pA声明时的类型。基类有虚函数时,typeid(*pA)返回的是pA指向对象的类型。比较两个带有虚函数的类的对象是否相等if(typeid(*a)==typeid(B))if(dynamic_cast<B*>(a)):如果能够成功向......
  • 【Cpp】RTTI 机制原理解析
    ReferencesBaiduWikiC++中的RTTI机制详解RTTI推荐阅读:RTTI原理推荐阅读:C++中的RTTI机制什么是RTTI机制?RTTI是“RuntimeTypeInformation”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。RTTI通过运行时类型信息程序能够使用基类的指针或引用......
  • rtti设置record的值
    rtti设置record的值uesesystem.rtti;classprocedureTrows.scan<T>(constaRec:T;instance:Pointer;ds:TDataSet);beginvarrtx:TRttiContext:=TRttiContext.Create;varrt:TRttiType:=rtx.GetType(TypeInfo(T));if(rt=nil)thenExit;for......
  • c++类型转换与RTTI运行阶段类型识别
    我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针,这种转换很容易出bug,需要严格审查代码才能消除这种隐患,但是C这种转换......
  • rtti路由
    rtti路由///<author>2023-2-10</author>fitdelphi\lazarusunitapi.router;{$IFDEFfpc}{$MODEDELPHI}{$H+}{$ENDIF}interfaceusesClasses,Rtti,StrUtils,SysUtils;type///<code>///基类///</code>TFunc=class(......