RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.
classtype_info
{
private
:
type_info(consttype_info&);
type_info&operator=(consttype_info&);
//type_info类的复制构造函数和赋值运算符是私有的。
public
:
virtual
~type_info();
//析构函数
booloperator==(consttype_info&)
const
;
//在type_info类中重载了==运算符,该运算符可以比较两个对象的类型是否相等。
booloperator!=(consttype_info&)
const
;
//重载的!=运算符,以比较两个对象的类型是否不相等
constchar*name()
const
;
//使用得较多的成员函数name,该函数反回对象的类型的名字。前面使用的typeid(a).name()就调用了该成员函数
boolbefore(consttype_info&);
};
// expre_typeid_Operator.cpp // compile with: /GR /EHsc #include <iostream> #include <typeinfo.h> class Base { public: virtual void vvfunc() {} }; class Derived : public Base {}; using namespace std; int main() { Derived* pd = new Derived; Base* pb = pd; int i = 0; cout << typeid( i ).name() << endl; // prints "int" cout << typeid( 3.14 ).name() << endl; // prints "double" cout << typeid( pb ).name() << endl; // prints "class Base *" cout << typeid( *pb ).name() << endl; // prints "class Derived" cout << typeid( pd ).name() << endl; // prints "class Derived *" cout << typeid( *pd ).name() << endl; // prints "class Derived" delete pd; }
typeid最常见的用途是比较两个表达式的类型,或者将表达式的类型与特定类型相比较。
Base *bp; Derived *dp; // compare type at run time of two objects if (typeid(*bp) == typeid(*dp)) { // bp and dp point to objects of the same type } // test whether run time type is a specific type if (typeid(*bp) == typeid(Derived)) { // bp actually points a Derived }
注意:如果是typeid(bp),则是对指针进行测试,这会返回指针(bp)的静态编译时类型(Base *)。
如果指针p的值是0,,并且指针所指的类型是带虚函数的类型,则typeid(*p)抛出一个bad_typeid异常。
参考:http://baike.baidu.com/view/1042388.htm
更多:
http://blog.csdn.net/acdnjjjdjkdckjj/article/details/6326189
c++ RTTI(runtime type info),布布扣,bubuko.com
原文:http://www.cnblogs.com/youxin/p/3735135.html