智能指针的向下转型

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


}

原文地址:https://www.cnblogs.com/lilun/p/1811156.html