|
Boost : |
From: Steven Watanabe (steven_at_[hidden])
Date: 2007-01-12 16:19:16
AMDG
Yuval Ronen wrote:
> In the following code:
>
> struct A
> {
> void func();
> }
>
> int main()
> {
> shared_ptr<A> a(new A);
> boost::bind(&A::func, a);
> }
>
> the bind() call returns a function object which holds the shared_ptr by
> value (it's one of the shared owners). This is an important feature I'm
> using, because sometimes the functor is the last owner left standing,
> and I want to keep A alive until the functor's destructor (actually, I
> don't really like this design, but I'm talking about legacy code here).
> Replacing boost::bind with lambda::bind doesn't compile. Is this feature
> not supported by lambda::bind? If not supported now, is it planned to be
> supported in the future? Can I in the mean time implement this feature
> in my code with relative ease?
>
> Thanks,
> Yuval
You can explicitly dereference the shared_ptr.
#include <boost/shared_ptr.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
struct A
{
void func() {}
};
template<class T>
struct identity_t {
mutable T t;
template<class Args>
struct sig {
typedef T& type;
};
identity_t(const T& arg) : t(arg) {}
T& operator()() const {
return(t);
}
};
template<class T>
identity_t<T> identity(const T& t) {
return(t);
}
int main()
{
boost::shared_ptr<A> a(new A);
boost::lambda::bind(&A::func, *boost::lambda::bind(identity(a)))();
}
In Christ,
Steven Watanabe
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk