代码改变世界

[C++]C++中的运行时类型检测

2014-01-03 22:56  hellenism  阅读(528)  评论(0编辑  收藏  举报

Date:
2014-1-3


Summary:

使用C++中的运行时类型检测.(文章重点在于记录本人的使用情况,并非深层讨论RTTI)


Contents:
写习惯C#的我,在C++依然存在哪些.NET的惯用写法,所以渴望C++也能提供运行时的类型检测,让我好写出这样的代码:

 

if(obj is Type)
{
   // Do Something
}

 

  

 

虽然这样的思想在C++应该被virtual方法和多肽思想代替,但是为了方便,我只能邪恶的使用RTTI来满足我的需求  

 

这里使用dynamic_cast可满足需求(这里不对dynamic_cast原理和程序的效率做研究,只限于满足需求)

 

class A
{
public:
    void aDo(){ cout << "I ' m A" << endl;};
};

class B
{
public:
    void bDo(){cout << "I ' m B" << endl;};
};

class C : public A,public B
{
public:
    void cDo(){cout << "I ' m C"<<endl;};
};

//////////////////////////////////////////////////////////////
A* p2 = new C();
    
// 此时我得到一个对象的引用,我想知道,这个对象是否是A类的子类
// 这个需求来源的初衷是多继承
auto p4 = dynamic_cast<A*>(p2);
    
if(p4)
 {
      //如果p4不为NULL,说明p3指向的对象是A类的子类,那么就可以做你想做得事了
      cout << "B是A的子类对象" << endl;
 }

Notes:

 

THE END