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
|