首页 > TAG信息列表 > RTTI

C++RTTI运算符

概述 运行时类型识别(RTTI)两个重要运算符: typeid:返回表达式类型。dynamic_cast:将基类指针或引用安全转换成派生类的指针或引用。 oop回顾: 不存在从基类向派生类的隐式转换。原因是因为派生类对象中包含基类部分和派生类部分,而基类对象中只包含有基类部分。不存在基类指针或

C++——简单的RTTI

即运行阶段类型识别(Runtime Type Identification)  C++有三个支持RTTI的元素 1.dynamic_cast,使用一个基类的指针生成一个指向派生类的指针,失败返回0,即空指针。 尖括号表示括号中的类型能否安全的转为尖括号中的类型 本质上就是个更加规范的类型转换 2.typeid, 返回一个指出对象

Java RTTI - 转载

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!   运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息。 多态(polymorphism)是基于RTTI实现的。RTTI的功能主要是由Class类实现的。   Cl

第七章:运行期类型识别RTTI

    1.RTTI①需要额外的空间以存储类型信息,通常是一个指针,指向某个类型信息节点。②需要额外的时间以决定执行期的类型。   2.编译器为了支持RTTI策略,给需要多态的类声明一个或多个虚函数,把与该类相关的类型信息(类型描述器type_info)对象都放进虚函数表中(通常放入第一个slot,

C++ ---使用RTTI和模板的一个问题记录

背景: 提供一个写log的接口,参数支持int,float,string,QString,char*等几个类型的输入。   想法: 接口为模板函数,并通过C++提供的type_info类获取输入参数的类型,在接口内部统一将参数转换为string,然后写入log。   错误代码: //支持string QString 整型(会转为int输出)和浮点型(浮点会转

C++对象模型之RTTI的实现原理

原文:C++对象模型之RTTI的实现原理   RTTI是Runtime Type Identification的缩写,意思是运行时类型识别。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。但是现在RTTI的类型识别已经不限于此了,它还能通过typeid操作符

RTTI和对象转型

这是我学习基于Linux C++做的笔记! 运行期型式信息RTTI RTTI 运行期间表示对象的型式信息优势:允许使用指向基类的指针或引用自如地操纵派生类对象typeid:获取表达式的类型;type_info:型式信息类;头文件:“typeinfo” 对象转型模板 dynamic_cast:动态转型(类类型指针或引用的转型) sta

RTTI & decltype & declval

ri# RTTI Run-Time Type Information,运行时类型信息。 RTTI 这种情况,一般是运行时的类型转换的,一般是和类型转换配合使用,给出代码实例: #include <iostream> class Base { public: virtual void foo() { std::cout << "base derived\n"; } }; class Derived

C++运行阶段类型识别(Runtime Type Identification)(C++新特性)

编译时开销 编译器在编译代码时,主要进行:词法分析(识别单词,确认词类:标识符、关键字、字符串、数字等等)、语法分析(识别短语和句型的语法属性,生成语法树)、语义分析(确认单词,句型的语义特征,如加减乘除等)、代码优化和代码生成等。模板、类层次结构、强制类型检查等新特性,以及大量使用了

对反射的理解

什么是反射 反射机制(Reflection)是指动态获取类信息、动态调用类方法的功能一般来说,程序是在编译期被加载,但反射在编译期并不确定哪个类被加载,而是在程序运行时才被加载、探知、自审 Java反射机制主要提供的功能: 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象

C++ Runtime Type Identification(RTTI)

What is RTTI for? The intent of RTTI is to provide a standard way for a program to determine the type of object during runtime. How Does RTTI Work? The dynamic_cast operator generates a pointer to a derived type from a pointer to a base type, if possible

RTTI

unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons; type TfrmRTTI = class(TForm) mmo1: TMemo; btn1: TButton;

Delphi XE----Rtti单元一(TRttiContext)

    通过 Rtti 单元的 TRttiContext(是个 record), 可以方便地获取类的方法、属性、字段的列表. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

获取对象名

Howto:从C++对象指针得到类名 2012-04-29JAVA程序在运行的时候,有丰富的动态类型信息。而C++则困难的多。C++的运行时类型信息有3种实现方式:语言本身的RTTI、MFC的CObject、QT的moc。下面仅介绍前两种。一、语言本身的RTTI:如果是POD类型,如:clas…JAVA程序在运行的时候,有丰富的

C/C++ RTTI

RTTI(Run Time Type Identification,运行时类型识别),用于运行时获取对象的类型信息。 1、dynamic_cast:将基类指针或者引用安全地转换成派生类指针或者引用。 2、typeid:返回指针或者引用指向的对象的类型信息。  

运行时类型识别(RTTI)

dynamic_cast转换 dynamic_cast执行两步操作,先验证转换是否有效,有效则进行实际转换 class Base { public: virtual void fun1(void){printf("this is Base fun1().\n");} virtual void fun2(void){printf("this is Base fun2().\n");} virtual void fun3(void){printf(&

c – 为什么dynamic_cast是邪恶的?在这种情况下我应该使用dynamic_cast吗?

有人说the use of dynamic_cast often means bad design and dynamic_cast can be replaced by virtual functions >为什么使用dynamic_cast认为设计不好? >假设我有函数名func(Animal * animal,int animalType),func中的实现如下: bool func(Animal* animal, int animalType) { .

c – RTTI与例外之间是否存在关联?

我记得在禁用了RTTI和异常的平台上编码,而在其他启用了它们的平台上编码.但是,我不记得在一个能够启用一个并禁用另一个的平台上进行编码. 这两个概念之间是否存在任何依赖关系?换句话说,异常需要RTTI才能运行吗?或者相反?解决方法:不,例外不需要RTTI功能,反之亦然,两者都是单独的功能

在C中类型相等测试w / decltype(),auto或RTTI? Boost是否有适合自己的东西?

我正在编写一些代码来将C类型转换为SQL DB的适当类型.我想识别类型,然后根据它是什么,生成适当的SQL代码.我不确定使用RTTI,auto或decltype可以在这方面做些什么.我有一些想法,但我不确定它们是否可行. 例如(我知道以下可能不是有效的C,我只是试图了解这个想法): if (decltype(some

c – 什么时候canid可以为同一类型返回不同的type_info实例?

Andrei Alexandrescu写于Modern C++ Design: The objects returned by typeid have static storage, so you don’t have to worry about lifetime issues. 安德烈继续说: The standard does not guarantee that each invocation of, say, typeid(int) returns a refer

RTTI

RTTI(Run-Time Type Identification) 运行时类型检查,在 C++层面主要体现在 dynamic_cast 和 typeid,VS 中虚函数表的-1 位置存放了指向 type_info 的指针。对于存在虚函数的类型,typeid 和dynamic_cast都会去查询 type_info   通过运行时类型信息程序能够使用基类的指针或引用

Linux C编译器(和链接器)如何决定将typeinfo放在何处?

我有一个在一个h文件中定义的类,并在一个lib(我们称之为libdef)的cpp中实现. 我还有另外两个包含此h文件的cpp文件的库.其中一个对这个类做了dynamic_cast()(我们称之为libdyn),另一个为这个类做了新的(我们称之为libnew). 似乎在其中一个库中有类型的typeinfo但在另一个库中没有:

有没有办法在超类构造函数中知道调用对象的子类? C

让我们假设我有类似的东西: class A { public: A(A* owner) { m_owner=owner; if (dynamic_cast<B*>(this)) { m_id=sm_bid; sm_bid++; } else { m_id=sm_aid; sm_aid++;

c – 返回一个Type,或者如何保留一个对象指针的类型?

我有一个非常复杂的代码结构,但重要的是: 典型的设置:我有一个基类和两个派生自这个基类的类,每个类都有自己的成员,没有标准的构造函数 class BaseSolver{ ... }; class SolverA : BaseSolver{ public: std::string a; SolverA(TypeA objectA); }; class SolverB : BaseS

C++ RTTI

1.RTTI RTTI的英文全部意思为Run-Time Type Identification,意思为“运行时类型判断”。RTTI的原理为对某一范型或者接口类型,在运行时再判断该类型或者接口的类型,然后运行对应类型的功能函数。 RTTI的类型的运用,在各种语言中广泛运用;对于JAVA来说,RTTI甚至被号称为JAVA的多态机制