|
From: Frank M. H. <fm...@us...> - 2007-02-22 19:51:22
|
Update of /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv6845/thread_safe_signals Modified Files: track.hpp Log Message: tracked object returned by single argument track() should at least support conversion back into a shared_ptr. Index: track.hpp =================================================================== RCS file: /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals/track.hpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- track.hpp 22 Feb 2007 18:54:58 -0000 1.9 +++ track.hpp 22 Feb 2007 19:51:20 -0000 1.10 @@ -48,14 +48,28 @@ T _value; weak_ptr<void> _tracked_ptr; }; - // Convenience functions for binders. + template<typename T> - tracked<weak_ptr<T> > track(const shared_ptr<T>& ptr) { - return tracked<weak_ptr<T> >(weak_ptr<T>(ptr), ptr); + class tracked_shared_ptr: public tracked<weak_ptr<T> > + { + public: + tracked_shared_ptr(const weak_ptr<T>& ptr): + tracked<weak_ptr<T> >(ptr, ptr.lock()) + {} + operator shared_ptr<T> () const + { + return shared_ptr<T>(static_cast<const weak_ptr<T> &>(*this)); + } + }; + + // Convenience functions for binders. + template<typename T> + tracked_shared_ptr<T> track(const shared_ptr<T>& ptr) { + return tracked_shared_ptr<T>(ptr); } template<typename T> - tracked<weak_ptr<T> > track(const weak_ptr<T>& ptr) { - return tracked<weak_ptr<T> >(ptr, ptr.lock()); + tracked_shared_ptr<T> track(const weak_ptr<T>& ptr) { + return tracked_shared_ptr<T>(ptr); } template<typename T> tracked<T> track(const T &value, const shared_ptr<void> &tracked_ptr) { |