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