[C++]C++中的运行时类型检测
2014-01-03 22:56 hellenism 阅读(529) 评论(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
人生就是一局不能Again的DOTA