diff options
Diffstat (limited to 'src/crepe/util')
| -rw-r--r-- | src/crepe/util/OptionalRef.h | 10 | ||||
| -rw-r--r-- | src/crepe/util/OptionalRef.hpp | 7 | 
2 files changed, 16 insertions, 1 deletions
| diff --git a/src/crepe/util/OptionalRef.h b/src/crepe/util/OptionalRef.h index 3201667..1b2cb3f 100644 --- a/src/crepe/util/OptionalRef.h +++ b/src/crepe/util/OptionalRef.h @@ -25,7 +25,7 @@ public:  	 */  	OptionalRef<T> & operator=(T & ref);  	/** -	 * \brief Retrieve this reference +	 * \brief Retrieve this reference (cast)  	 *  	 * \returns Internal reference if it is set  	 * @@ -33,6 +33,14 @@ public:  	 */  	operator T &() const;  	/** +	 * \brief Retrieve this reference (member access) +	 * +	 * \returns Internal reference if it is set +	 * +	 * \throws std::runtime_error if this function is called while the reference it not set +	 */ +	T * operator->() const; +	/**  	 * \brief Check if this reference is not empty  	 *  	 * \returns `true` if reference is set, or `false` if it is not diff --git a/src/crepe/util/OptionalRef.hpp b/src/crepe/util/OptionalRef.hpp index 4608c9e..5e36b3a 100644 --- a/src/crepe/util/OptionalRef.hpp +++ b/src/crepe/util/OptionalRef.hpp @@ -19,6 +19,13 @@ OptionalRef<T>::operator T &() const {  }  template <typename T> +T * OptionalRef<T>::operator->() const { +	if (this->ref == nullptr) +		throw std::runtime_error("OptionalRef: attempt to dereference nullptr"); +	return this->ref; +} + +template <typename T>  OptionalRef<T> & OptionalRef<T>::operator=(T & ref) {  	this->ref = &ref;  	return *this; |