// BoostTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include "boost/cast.hpp" #include "boost/shared_ptr.hpp" using namespace boost; using namespace std; class base1 { public: virtual void print() { cout<<"base1::print"<<endl; } }; class base2 { public: void only_base2() { cout<<"only_base2()"<<endl; } }; class derived : public base1, public base2 { public: void print() { cout<<"derived::print"<<endl; } void only_here() { cout<<"derived::only_here()"<<endl; } void only_base2() { cout<<"oops, here too!"<<endl; } }; int main() { shared_ptr<base1> p(new derived); p->print(); try { shared_ptr<derived> pD(shared_polymorphic_cast<derived>(p)); pD->only_here(); pD->only_base2(); shared_ptr<base2> pB(shared_polymorphic_cast<base2>(p)); pB->only_base2(); } catch(bad_cast &e) { cout<<e.what()<<endl; } }