As a good introduction to some of the most interesting boost libraries you can read "Beyond the C++ Standard Library: An Introduction to Boost", by Björn Karlsson, an Addison Wesley Professional book. That's what I'm actually doing, and these are a few notes that I'm jotting down in the meanwhile.
Let's say we have a class A, and we want to call from one of its methods a free function that accept as input parameter a shared_ptr to A.
There is a relatively simple way to get it. We could let our class A derive from enable_shared_from_this<A> and use shared_from_this() to get the shared_ptr.
Here is a short example that shows this feature:
#include <iostream>
#include "boost/shared_ptr.hpp"
#include "boost/enable_shared_from_this.hpp"
using std::cout;
using std::endl;
using boost::shared_ptr;
using boost::enable_shared_from_this;
namespace
{
class A;
void doStuff(shared_ptr<A> p);
class A : public enable_shared_from_this<A>
{
public:
void callDoStuff()
{
cout << "in A::callDoStuff()" << endl;
doStuff(shared_from_this());
}
void cheers() { cout << "Cheers from A" << endl; }
};
void doStuff(shared_ptr<A> p)
{
cout << "Doing stuff in doStuff()" << endl;
p->cheers();
}
}
void sharedThis()
{
shared_ptr<A> p(new A());
p->callDoStuff();
}
No comments:
Post a Comment