// 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;
}
}