diff options
Diffstat (limited to 'maybe.h')
-rw-r--r-- | maybe.h | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -0,0 +1,35 @@ +#pragma once + +template <typename T> +class Maybe{ + T *value; + +public: + Maybe(void):value(NULL){} // 'Nothing' constructor + Maybe(T v):value(new T(move(v))){} + + ~Maybe(void){ + if(value)delete value; + } + + T fromJust(void) const { + return *value; + } + + T fromMaybe(T &def) const { + if(value)return *value; + else return def; + } + + bool isJust(void) const { + return (bool)value; + } + + bool isNothing(void) const { + return !value; + } + + static Maybe<T> Nothing(void){ + return Maybe<T>(); + } +}; |