|
From: Frank M. H. <fm...@us...> - 2007-02-22 18:55:02
|
Update of /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv16854/thread_safe_signals Modified Files: track.hpp Log Message: Forget about trying to support implicit conversions for the sake of easy binding. The user can use the two argument form of track if they need to. Index: track.hpp =================================================================== RCS file: /cvsroot/boost-sandbox/boost-sandbox/boost/thread_safe_signals/track.hpp,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- track.hpp 22 Feb 2007 16:57:12 -0000 1.8 +++ track.hpp 22 Feb 2007 18:54:58 -0000 1.9 @@ -20,46 +20,13 @@ namespace boost { namespace signalslib { - /* a weak_ptr that supports various implicit conversions, so it - binds to more types of parameters with boost::bind */ - template<typename T> - class convertible_weak_ptr: public weak_ptr<T> - { - public: - convertible_weak_ptr(const weak_ptr<T> &ptr): weak_ptr<T>(ptr) - {} - convertible_weak_ptr(const shared_ptr<T> &ptr): weak_ptr<T>(ptr) - {} - operator T* () - { - return shared_ptr<T>(*this).get(); - } - operator const T* () const - { - return shared_ptr<const T>(*this).get(); - } - operator shared_ptr<T> () - { - return shared_ptr<T>(*this); - } - operator shared_ptr<const T> () const - { - return shared_ptr<const T>(*this); - } - operator T& () - { - return *shared_ptr<T>(*this).get(); - } - operator const T& () - { - return *shared_ptr<const T>(*this).get(); - } - }; // The actual wrapper for tracked shared_ptr-managed objects. template<typename T> class tracked { public: + typedef T value_type; + tracked(const T &value, const shared_ptr<void>& tracked_ptr): _value(value), _tracked_ptr(tracked_ptr) {} @@ -83,12 +50,12 @@ }; // Convenience functions for binders. template<typename T> - tracked<convertible_weak_ptr<T> > track(const shared_ptr<T>& ptr) { - return tracked<convertible_weak_ptr<T> >(weak_ptr<T>(ptr), ptr); + tracked<weak_ptr<T> > track(const shared_ptr<T>& ptr) { + return tracked<weak_ptr<T> >(weak_ptr<T>(ptr), ptr); } template<typename T> - tracked<convertible_weak_ptr<T> > track(const weak_ptr<T>& ptr) { - return tracked<convertible_weak_ptr<T> >(ptr, ptr.lock()); + tracked<weak_ptr<T> > track(const weak_ptr<T>& ptr) { + return tracked<weak_ptr<T> >(ptr, ptr.lock()); } template<typename T> tracked<T> track(const T &value, const shared_ptr<void> &tracked_ptr) { @@ -99,8 +66,9 @@ T* get_pointer(const signalslib::tracked<T*> &tracked) {return tracked;} template<typename T> T* get_pointer(const signalslib::tracked<weak_ptr<T> > &tracked) {return shared_ptr<T>(static_cast<weak_ptr<T> >(tracked)).get();} + // handles T=shared_ptr or similar case template<typename T> - T* get_pointer(const signalslib::tracked<convertible_weak_ptr<T> > &tracked) {return shared_ptr<T>(static_cast<weak_ptr<T> >(tracked)).get();} + typename T::pointer get_pointer(const signalslib::tracked<T> &tracked) {return static_cast<const T&>(tracked).get();} } // end namespace BOOST_SIGNALS_NAMESPACE } // end namespace boost |