Listing 7
#include <memory>
#include <iostream>
using std::tr1::shared_ptr; using std::tr1::static_pointer_cast;
using std::tr1::dynamic_pointer_cast; using std::tr1::const_pointer_cast;
struct base1
{ // simple base class
virtual ~base1() {}
};
struct base2
{ // another simple base
virtual ~base2() {}
};
struct derived : base1, base2
{ // derived class
};
int main()
{ // demonstrate cast functions
shared_ptr<const base1> sp0(new derived);
shared_ptr<const derived> sp1 = static_pointer_cast<const derived>(sp0);
shared_ptr<const base2> sp2 = dynamic_pointer_cast<const base2>(sp0);
shared_ptr<base1> sp3 = const_pointer_cast<base1>(sp0);
return 0;
}