NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
ref.hpp
浏览该文件的文档.
1#ifndef NEFORCE_TUI_DOM_REF_HPP__
2#define NEFORCE_TUI_DOM_REF_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15NEFORCE_BEGIN_TUI__
16
21
30template <typename T>
31class ref {
32public:
36 ref() :
37 storage_(T{}) {}
38
43 explicit ref(T value) :
44 storage_(_NEFORCE move(value)) {}
45
50 explicit ref(T* ptr) :
51 storage_(ptr) {}
52
57 T& operator*() {
58 if (holds_pointer()) {
59 return *pointer();
60 }
61 return value();
62 }
63
68 const T& operator*() const {
69 if (holds_pointer()) {
70 return *pointer();
71 }
72 return value();
73 }
74
79 T* operator->() { return &operator*(); }
80
85 const T* operator->() const { return &operator*(); }
86
92 ref& operator=(T v) {
93 if (holds_pointer()) {
94 *pointer() = _NEFORCE move(v);
95 } else {
96 value() = _NEFORCE move(v);
97 }
98 return *this;
99 }
100
105 NEFORCE_NODISCARD bool holds_pointer() const noexcept { return storage_.index() == 1; }
106
107private:
108 _NEFORCE variant<T, T*> storage_;
109
110 NEFORCE_NODISCARD T& value() { return _NEFORCE get<0>(storage_); }
111 NEFORCE_NODISCARD const T& value() const { return _NEFORCE get<0>(storage_); }
112 NEFORCE_NODISCARD T* pointer() const { return _NEFORCE get<1>(storage_); }
113};
114
121template <typename T>
123public:
128 storage_(T{}) {}
129
134 const_ref(T value) :
135 storage_(_NEFORCE move(value)) {}
136
141 const_ref(const T* ptr) :
142 storage_(ptr) {}
143
148 const T& operator*() const {
149 if (holds_pointer()) {
150 return *_NEFORCE get<1>(storage_);
151 }
152 return _NEFORCE get<0>(storage_);
153 }
154
159 const T* operator->() const { return &operator*(); }
160
165 const T& operator()() const { return operator*(); }
166
171 NEFORCE_NODISCARD bool holds_pointer() const noexcept { return storage_.index() == 1; }
172
173private:
174 _NEFORCE variant<T, const T*> storage_;
175};
176
180class string_ref : public ref<string> {
181public:
182 using ref<string>::ref;
183
188 string_ref(const char* s) :
189 ref(string(s)) {}
190
196 ref(string(sv)) {}
197
202 string_ref(const wchar_t* ws) :
203 ref(to_string(ws)) {}
204};
205
209class const_string_ref : public const_ref<string> {
210public:
211 using const_ref<string>::const_ref;
212
217 const_string_ref(const char* s) :
218 const_ref(string(s)) {}
219
226};
227 // TUI
229
230NEFORCE_END_TUI__
231NEFORCE_END_NAMESPACE__
232#endif // NEFORCE_TUI_DOM_REF_HPP__
const_ref()
默认构造
const T & operator*() const
解引用
const_ref(T value)
从值构造
const T * operator->() const
成员访问
bool holds_pointer() const noexcept
检查是否绑定外部指针
const T & operator()() const
调用运算符
const_ref(const T *ptr)
从常量指针构造
const_string_ref(string_view sv)
从 string_view 构造
const_string_ref(const char *s)
从 C 字符串构造
ref()
默认构造
定义 ref.hpp:36
ref(T *ptr)
从指针构造
定义 ref.hpp:50
ref(T value)
从值构造
定义 ref.hpp:43
const T & operator*() const
常量解引用
定义 ref.hpp:68
const T * operator->() const
常量成员访问
定义 ref.hpp:85
ref & operator=(T v)
赋值(同时写入绑定的外部变量)
定义 ref.hpp:92
bool holds_pointer() const noexcept
检查是否绑定外部指针
T * operator->()
成员访问
定义 ref.hpp:79
T & operator*()
解引用
定义 ref.hpp:57
string_ref(const wchar_t *ws)
从宽字符串构造
string_ref(const char *s)
从 C 字符串构造
string_ref(string_view sv)
从 string_view 构造
enable_if_t< is_void_v< T >, future_result_t< T > > get(future< T > &f)
通用future结果获取函数
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string< char > string
字符字符串
basic_string_view< char > string_view
字符字符串视图
constexpr string to_string(const CharT &c)
将字符转换为普通字符串
变体类型主模板
UTF字符包装类
变体类型实现