🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ReflectAPI.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/ReflectAPI.hpp"
25
26AST_NAMESPACE_BEGIN
27
38AST_CORE_CAPI Property* _aNewPropertyTimePoint(FPropertyGet getter, FPropertySet setter);
39
40
46template<>
47A_ALWAYS_INLINE Property* _aNewProperty<TimePoint>(FPropertyGet getter, FPropertySet setter)
48{
49 return _aNewPropertyTimePoint(getter, setter);
50}
51
52
53
54
55template<typename T, TimePoint T::* Member>
56A_ALWAYS_INLINE Property* aNewPropertyTimePointMem()
57{
58 return _aNewPropertyTimePoint(
59 [](const void* obj, void* value) -> errc_t
60 {
61 *((TimePoint*)value) = ((T*)obj)->*Member;
62 return 0;
63 },
64 [](void* obj, const void* value) -> errc_t
65 {
66 ((T*)obj)->*Member = *((TimePoint*)value);
67 return 0;
68 }
69 );
70}
71
72
73template<typename T, TimePoint T::* Member>
75{
76 return aNewPropertyTimePointMem<T, Member>();
77}
78
79
80
86template<typename T, TimePoint(T::*Getter)() const>
87A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
88{
89 return _aNewPropertyTimePoint(
90 [](const void* obj, void* value) -> errc_t
91 {
92 *((TimePoint*)value) = (((T*)obj)->*Getter)();
93 return 0;
94 },
95 nullptr
96 );
97}
98
99
100template<typename T, const TimePoint& (T::* Getter) () const, void (T::* Setter)(const TimePoint&)>
101A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
102{
103 static_assert(Getter!=nullptr, "invalid getter");
104 static_assert(Setter!=nullptr, "invalid setter");
105
107 [](const void* obj, void* value) -> errc_t
108 {
109 *((TimePoint*)value) = (((T*)obj)->*Getter)();
110 return 0;
111 },
112 [](void* obj, const void* value) -> errc_t
113 {
114 (((T*)obj)->*Setter)(*((TimePoint*)value));
115 return 0;
116 }
117 );
118}
119
120
121
122template<typename T, const TimePoint& (T::* Getter) () const, errc_t (T::* Setter)(const TimePoint& value)>
123A_ALWAYS_INLINE Property* aNewPropertyTimePoint()
124{
125 static_assert(Getter!=nullptr, "invalid getter");
126 static_assert(Setter!=nullptr, "invalid setter");
127
129 [](const void* obj, void* value) -> errc_t
130 {
131 *((TimePoint*)value) = (((T*)obj)->*Getter)();
132 return 0;
133 },
134 [](void* obj, const void* value) -> errc_t
135 {
136 return (((T*)obj)->*Setter)(*((TimePoint*)value));
137 }
138 );
139}
140
141
144AST_NAMESPACE_END
反射属性类
定义 Property.hpp:58
Property * _aNewPropertyTimePoint(FPropertyGet getter, FPropertySet setter)
创建一个时间点属性
定义 ReflectAPI.cpp:26
A_ALWAYS_INLINE Property * aNewPropertyTimePoint()
创建一个时间点属性
定义 ReflectAPI.hpp:74