c++ RTTI(runtime type info)
RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.
typeid函数
type_info类
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&);
};
typeid函数怎样创建type_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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。