SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp
SDL3pp_optionalRef.h
1
#ifndef SDL3PP_OPTIONAL_REF_H_
2
#define SDL3PP_OPTIONAL_REF_H_
3
4
#include <optional>
5
6
namespace
SDL
{
7
18
template
<
class
T>
19
class
OptionalRef
20
{
21
T* ptr;
22
23
public
:
24
constexpr
OptionalRef
(std::nullopt_t = std::nullopt)
25
: ptr(
nullptr
)
26
{
27
}
28
29
constexpr
OptionalRef
(T& value)
30
: ptr(&value)
31
{
32
}
33
34
constexpr
auto
operator<=>(
const
OptionalRef
&)
const
=
default
;
35
36
constexpr
bool
has_value()
const
{
return
ptr !=
nullptr
; }
37
38
constexpr
const
T& value()
const
{
return
*ptr; }
39
constexpr
T& value() {
return
*ptr; }
40
41
constexpr
operator
T*()
const
{
return
ptr; }
42
43
constexpr
bool
operator==(std::nullopt_t)
const
{
return
ptr ==
nullptr
; }
44
45
constexpr
T& operator*() {
return
*ptr; }
46
constexpr
const
T& operator*()
const
{
return
*ptr; }
47
constexpr
T* operator->() {
return
ptr; }
48
constexpr
const
T* operator->()
const
{
return
ptr; }
49
};
50
51
template
<
class
T>
52
constexpr
OptionalRef<T>
fromNullable(T* ptr)
53
{
54
if
(ptr)
return
{*ptr};
55
return
std::nullopt;
56
}
57
58
}
// namespace SDL
59
60
#endif
/* SDL3PP_OPTIONAL_REF_H_ */
SDL::OptionalRef
Optional-like shim for references.
Definition
SDL3pp_optionalRef.h:20
SDL
the main namespace where all SDL3pp public functions and types live
Definition
SDL3pp_assert.h:7
Generated by
1.9.8