|
Boost Users : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2007-06-11 09:11:15
Hughes, James wrote:
> RemoveIf(Fred.begin(),
> Fred.end(),
> boost::bind(&map<string, shared_ptr<data>
> >::value_type::second::unique, _1)
> )
>
> Still get same compile fault however.
It would be nice if this could work with a single bind, but unfortunately
you need two:
boost::bind( &shared_ptr<data>::unique,
boost::bind( &map<string, shared_ptr<data> >::value_type::second, _1 )
)
There is an additional pitfall here; depending on the version of boost::bind
and the compiler, the inner bind may return a shared_ptr by value, making
the use_count at least 2. You should probably just fall back to the
old-fashioned
bool second_unique( map<string, shared_ptr<data> >::value_type & v )
{
return v.second.unique();
}
(I'm using a non-const reference as a parameter to guard against potential
silent implicit conversions which could also increase the use_count.)
Removing the unique entries sounds like purging a cache, maybe weak_ptr will
work better in your map?
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net