18 #ifndef GAZEBO_COMMON_WEAKBIND_HH_
19 #define GAZEBO_COMMON_WEAKBIND_HH_
22 #ifndef BOOST_BIND_GLOBAL_PLACEHOLDERS
23 #define BOOST_BIND_GLOBAL_PLACEHOLDERS
25 #include <boost/bind.hpp>
26 #include <boost/shared_ptr.hpp>
36 template <
typename Func,
typename T>
39 public:
using WeakPtr = boost::weak_ptr<T>;
58 public:
template <
typename... Args>
auto operator()(Args&&... _args)
59 ->
typename std::enable_if<
61 decltype(this->func(std::forward<Args>(_args)...))
63 decltype(this->func(std::forward<Args>(_args)...))
66 auto ptrLock = this->ptr.lock();
69 return this->func(std::forward<Args>(_args)...);
78 public:
template <
typename... Args>
auto operator()(Args&&... _args)
79 ->
typename std::enable_if<
81 decltype(this->func(std::forward<Args>(_args)...))
86 auto ptrLock = this->ptr.lock();
89 this->func(std::forward<Args>(_args)...);
94 template <
typename Func,
typename T>
113 template <
typename T,
typename Func,
typename... Args>
114 auto weakBind(Func _func, boost::shared_ptr<T> _ptr, Args... _args)
115 #if __cplusplus < 201402L
117 boost::bind(_func, _ptr.get(), _args...),
118 boost::weak_ptr<T>(_ptr)))
122 boost::bind(_func, _ptr.get(), _args...),
123 boost::weak_ptr<T>(_ptr));
common
Definition: FuelModelDatabase.hh:42
Function object wrapper used by common::weakBind.
Definition: WeakBind.hh:38
boost::weak_ptr< T > WeakPtr
Definition: WeakBind.hh:39
WeakBinder(Func _func, WeakPtr _ptr)
Constructor.
Definition: WeakBind.hh:52
auto operator()(Args &&... _args) -> typename std::enable_if< std::is_void< decltype(this->func(std::forward< Args >(_args)...)) >::value, void >::type
Return void version.
Definition: WeakBind.hh:78
auto operator()(Args &&... _args) -> typename std::enable_if< !std::is_void< decltype(this->func(std::forward< Args >(_args)...)) >::value, decltype(this->func(std::forward< Args >(_args)...)) >::type
Return non-void version.
Definition: WeakBind.hh:58
auto weakBind(Func _func, boost::shared_ptr< T > _ptr, Args... _args) -> decltype(details::makeWeakBinder(boost::bind(_func, _ptr.get(), _args...), boost::weak_ptr< T >(_ptr)))
Definition: WeakBind.hh:114
WeakBinder< Func, T > makeWeakBinder(Func func, boost::weak_ptr< T > ptr)
Definition: WeakBind.hh:95
Forward declarations for the common classes.
Definition: Animation.hh:27