NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
property.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_REFLECT_PROPERTY_HPP__
2#define NEFORCE_CORE_REFLECT_PROPERTY_HPP__
3
10
13NEFORCE_BEGIN_NAMESPACE__
14NEFORCE_BEGIN_REFLECT__
15
21
29public:
30 using getter = function<meta_any(void*)>;
31 using setter = function<void(void*, const meta_any&)>;
32
33private:
34 string_view name_;
35 reflect::type_id type_id_;
36 getter getter_;
37 setter setter_;
38
39public:
48 name_(name),
49 type_id_(type_id),
50 getter_(move(getter)),
51 setter_(move(setter)) {}
52
57 NEFORCE_NODISCARD string_view name() const noexcept { return name_; }
58
63 NEFORCE_NODISCARD reflect::type_id type_id() const noexcept { return type_id_; }
64
70 NEFORCE_NODISCARD meta_any get(void* obj) const {
71 if (!obj || !getter_) {
72 return meta_any{};
73 }
74 return getter_(move(obj));
75 }
76
83 bool set(void* obj, const meta_any& value) const {
84 if (!obj || !setter_) {
85 return false;
86 }
87 try {
88 setter_(move(obj), value);
89 return true;
90 } catch (...) {
91 return false;
92 }
93 }
94
102 template <typename T, enable_if_t<!is_same_v<meta_any, decay_t<T>>, int> = 0>
103 bool set(void* obj, T&& value) const {
104 return this->set(obj, meta_any{_NEFORCE forward<T>(value)});
105 }
106};
107 // Reflection
109
110NEFORCE_END_REFLECT__
111NEFORCE_END_NAMESPACE__
112#endif // NEFORCE_CORE_REFLECT_PROPERTY_HPP__
函数包装器主模板声明
类型擦除容器
bool set(void *obj, const meta_any &value) const
设置属性值
function< meta_any(void *)> getter
属性读取器类型
NEFORCE_NODISCARD reflect::type_id type_id() const noexcept
获取属性类型ID
NEFORCE_NODISCARD string_view name() const noexcept
获取属性名称
meta_property(string_view name, reflect::type_id type_id, getter getter, setter setter)
构造函数
function< void(void *, const meta_any &)> setter
属性写入器类型
bool set(void *obj, T &&value) const
设置属性值(直接值版本)
NEFORCE_NODISCARD meta_any get(void *obj) const
获取属性值
通用函数包装器
NEFORCE_NODISCARD constexpr T && forward(remove_reference_t< T > &x) noexcept
完美转发左值
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
类型擦除容器