10 #ifndef OBSERVERPTR_H_ 11 #define OBSERVERPTR_H_ 138 operator bool()
const {
return _ptr !=
nullptr; }
140 operator int()
const =
delete;
147 template <
typename W>
operator W *() {
return _ptr; }
155 T *
get()
const {
return _ptr; }
169 throw(std::runtime_error(
"observer_ptr points to nothing"));
248 template <
typename T,
typename W>
struct one_observer_ptr :
or_<is_observer_ptr<T>, is_observer_ptr<W>> {};
250 template <
typename T,
typename W>
252 or_<is_observer_ptr<T>, is_observer_ptr<W>>,
254 and_<std::is_pointer<T>, std::is_pointer<W>>>
263 template <
typename T,
typename W>
265 return (p1.
get() == p2);
268 template <
typename T,
typename W>
275 template <
typename T,
typename W>
276 typename std::enable_if_t<one_observer_ptr_and_no_pointer<T, W>::value,
bool>
operator==(
const T &p1,
const W &p2) {
277 return (p1.get() == p2.get());
280 template <
typename T,
typename W>
281 typename std::enable_if_t<one_observer_ptr<T, W>::value,
bool>
operator!=(
const T &p1,
const W &p2) {
T * get() const
Getter for pointed address.
Definition: ObserverPtr.h:155
A smart pointer not owning the wrapped object.
Definition: ObserverPtr.h:28
T * operator->() const
Arrow operator.
Definition: ObserverPtr.h:161
observer_ptr()
Default constructor.
Definition: ObserverPtr.h:36
std::enable_if_t< one_observer_ptr< T, W >::value, bool > operator!=(const T &p1, const W &p2)
Definition: ObserverPtr.h:281
observer_ptr & operator=(const observer_ptr< W > &p)
Assignment operator.
Definition: ObserverPtr.h:57
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
observer_ptr(const std::unique_ptr< W > &p)
Constructor from std::unique_ptr.
Definition: ObserverPtr.h:96
Definition: ObserverPtr.h:248
observer_ptr(std::nullptr_t)
Null constructor.
Definition: ObserverPtr.h:44
observer_ptr(W *p)
Constructor from raw pointer.
Definition: ObserverPtr.h:72
std::enable_if_t< std::is_pointer< W >::value, bool > operator==(const observer_ptr< T > &p1, const W &p2)
Definition: ObserverPtr.h:264
T & operator*() const
Indirection operator.
Definition: ObserverPtr.h:167
observer_ptr & operator=(const std::shared_ptr< W > &p)
Assignment operator from std::shared_ptr.
Definition: ObserverPtr.h:128
observer_ptr(const std::shared_ptr< W > p)
Constructor from std::shared_ptr.
Definition: ObserverPtr.h:118
observer_ptr(const observer_ptr< W > p)
Copy constructor.
Definition: ObserverPtr.h:50
observer_ptr & operator=(W *p)
Assignment operator from raw pointer.
Definition: ObserverPtr.h:82
T * _ptr
Comparison with observer_ptr.
Definition: ObserverPtr.h:240
observer_ptr & operator=(const std::unique_ptr< W > &p)
Assignment operator from std::unique_ptr.
Definition: ObserverPtr.h:106
Definition: ObserverPtr.h:251
Definition: ObserverPtr.h:245