Provides a wrapper which allows the original object to be passed like a reference. More...
#include <references.hpp>
Public Types | |
typedef T | type |
Public Member Functions | |
operator T & () const | |
Convenience operator for converting to the underlying reference directly. | |
T * | pointer () const |
Accessor to a pointer to the original instance. | |
T & | reference () const |
Accessor to the reference of the original instance. | |
ReferenceWrapper (T &t) | |
Constructs the wrapper around the supplied object instance. | |
virtual | ~ReferenceWrapper () |
Private Attributes | |
T * | obj_ptr |
Provides a wrapper which allows the original object to be passed like a reference.
This class wraps the supplied object, storing it as a pointer and allowing it to be passed like a regular object. By itself, this is not terribly useful, but in combination with the ref/cref functions and also the is_reference_wrapper trait, it allows things like functions and function objects to be easily manipulated.
Note: reference wrappers might seem a bit redundant - why do we need them? The following case illustrates a desired usage scenario.
class A { public: template <typename T> void f(T i) { cout << "Not a reference input" << endl; } template <typename T> void f(T &i) { cout << "A reference input" << endl; } }
Unfortunately, when you come to call this function, you'll get an ambiguity error.
In these situations you can use a simple function call (not ref) and pass in this reference wrapper:
class A { public: template <typename T> void f(const T &t) { if ( is_reference_wrapper<T> ) { // do something for references } else { // do something for non-references } } }
T | : the type of object this class is wrapping. |
Definition at line 85 of file references.hpp.
typedef T ecl::ReferenceWrapper< T >::type |
Convenient handle to the reference wrapper's base type.
Definition at line 88 of file references.hpp.
ecl::ReferenceWrapper< T >::ReferenceWrapper | ( | T & | t | ) | [inline] |
Constructs the wrapper around the supplied object instance.
Constructs the wrapper around the supplied object instance.
t | : the object instance. |
Definition at line 97 of file references.hpp.
virtual ecl::ReferenceWrapper< T >::~ReferenceWrapper | ( | ) | [inline, virtual] |
Definition at line 99 of file references.hpp.
ecl::ReferenceWrapper< T >::operator T & | ( | ) | const [inline] |
Convenience operator for converting to the underlying reference directly.
When used where the underlying reference is expected, this automatically handles the conversion.
Definition at line 109 of file references.hpp.
T* ecl::ReferenceWrapper< T >::pointer | ( | ) | const [inline] |
Accessor to a pointer to the original instance.
Returns a pointer to the wrapped object.
Definition at line 127 of file references.hpp.
T& ecl::ReferenceWrapper< T >::reference | ( | ) | const [inline] |
Accessor to the reference of the original instance.
Returns a reference to the wrapped object.
Definition at line 118 of file references.hpp.
T* ecl::ReferenceWrapper< T >::obj_ptr [private] |
Definition at line 130 of file references.hpp.