1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
   | #include <iostream>
#include <boost/shared_ptr.hpp>
 
struct base
{
   virtual ~base(){}
   virtual void do_it() const
   {
      std::cout<<"base::do_it\n";
   }
 
   virtual void do_it_non_const()
   {
      std::cout<<"base::do_it_non_const\n";
   }
};
 
struct derivee : public base
{
   virtual void do_it() const
   {
      std::cout<<"derivee::do_it\n";
   }
 
   virtual void do_it_non_const()
   {
      std::cout<<"derivee::do_it_non_const\n";
   }
};
 
void ma_fonction(boost::shared_ptr<base> const&p)
{
   p->do_it();
}
 
void ma_fonction_non_const(boost::shared_ptr<base> &p)
{
   p->do_it_non_const();
}
 
int main()
{
   boost::shared_ptr<derivee> p(new derivee);
   ma_fonction(p);
   boost::shared_ptr<base> pb = p;
   ma_fonction_non_const(pb);
   return 0;
} | 
Partager