BAN: Add operator-> and operator* to Optional
This commit is contained in:
parent
d0a0e3bdef
commit
16e5f96b1d
|
@ -20,6 +20,12 @@ namespace BAN
|
||||||
Optional& operator=(const Optional&);
|
Optional& operator=(const Optional&);
|
||||||
Optional& operator=(Optional&&);
|
Optional& operator=(Optional&&);
|
||||||
|
|
||||||
|
T* operator->();
|
||||||
|
const T* operator->() const;
|
||||||
|
|
||||||
|
T& operator*();
|
||||||
|
const T& operator*() const;
|
||||||
|
|
||||||
bool has_value() const;
|
bool has_value() const;
|
||||||
|
|
||||||
T&& release_value();
|
T&& release_value();
|
||||||
|
@ -76,10 +82,38 @@ namespace BAN
|
||||||
if (other.has_value)
|
if (other.has_value)
|
||||||
{
|
{
|
||||||
m_has_value = true;
|
m_has_value = true;
|
||||||
new (m_storage) T(BAN::move(other.relase_value()));
|
new (m_storage) T(BAN::move(other.release_value()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T* Optional<T>::operator->()
|
||||||
|
{
|
||||||
|
ASSERT(has_value());
|
||||||
|
return &value();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
const T* Optional<T>::operator->() const
|
||||||
|
{
|
||||||
|
ASSERT(has_value());
|
||||||
|
return &value();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T& Optional<T>::operator*()
|
||||||
|
{
|
||||||
|
ASSERT(has_value());
|
||||||
|
return value();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
const T& Optional<T>::operator*() const
|
||||||
|
{
|
||||||
|
ASSERT(has_value());
|
||||||
|
return value();
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool Optional<T>::has_value() const
|
bool Optional<T>::has_value() const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue