🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Property.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "Field.hpp"
25#include "ReflectAPI.hpp"
26
27AST_NAMESPACE_BEGIN
28
29class PropertyVisitor;
30
42
47AST_UTIL_CAPI errc_t aFakeGet(const void* container, void* value);
48
49
54AST_UTIL_CAPI errc_t aFakeSet(void* container, const void* value);
55
57class AST_UTIL_API Property: public Field
58{
59public:
62 eReadable = 0x01,
63 eWritable = 0x02,
64 };
65public:
66 Property(StringView name, StringView desc, FPropertyGet getter, FPropertySet setter)
67 : Field(name, desc)
68 , getter_(getter?getter:&aFakeGet)
69 , setter_(setter?setter:&aFakeSet)
70 {}
71 Property(FPropertyGet getter, FPropertySet setter)
72 : Field()
73 , getter_(getter?getter:&aFakeGet)
74 , setter_(setter?setter:&aFakeSet)
75 {}
76 Property() = default;
77 ~Property() = default;
78
83 virtual errc_t accept(PropertyVisitor& visitor, const void* container) = 0;
84
88 virtual errc_t getValueDouble(const void* container, double& value) = 0;
89
94 virtual errc_t setValueDouble(void* container, double value) = 0;
95
100 virtual errc_t getValueInt(const void* container, int& value) = 0;
101
106 virtual errc_t setValueInt(void* container, int value) = 0;
107
112 virtual errc_t getValueBool(const void* container, bool& value) = 0;
113
118 virtual errc_t setValueBool(void* container, bool value) = 0;
119
124 virtual errc_t getValueString(const void* container, std::string& value) = 0;
125
130 virtual errc_t setValueString(void* container, StringView value) = 0;
131
132protected:
137 A_ALWAYS_INLINE
138 errc_t getValue(void* container, void* value)
139 {
140 return getter_(container, value);
141 }
142
147 A_ALWAYS_INLINE
148 errc_t setValue(void* container, const void* value)
149 {
150 return setter_(container, value);
151 }
152protected:
153 FPropertyGet getter_ {nullptr}; // 获取属性值的函数指针
154 FPropertySet setter_ {nullptr}; // 设置属性值的函数指针
155};
156
159AST_NAMESPACE_END
反射字段类
定义 Field.hpp:34
定义 PropertyVisitor.hpp:44
反射属性类
定义 Property.hpp:58
A_ALWAYS_INLINE errc_t setValue(void *container, const void *value)
设置属性值
定义 Property.hpp:148
virtual errc_t setValueString(void *container, StringView value)=0
设置属性值(String类型)
EPropertyFlag
属性标志位
定义 Property.hpp:61
virtual errc_t getValueDouble(const void *container, double &value)=0
A_ALWAYS_INLINE errc_t getValue(void *container, void *value)
获取属性值
定义 Property.hpp:138
virtual errc_t accept(PropertyVisitor &visitor, const void *container)=0
接受访问者
virtual errc_t getValueBool(const void *container, bool &value)=0
获取属性值(bool类型)
virtual errc_t setValueBool(void *container, bool value)=0
设置属性值(bool类型)
virtual errc_t setValueInt(void *container, int value)=0
设置属性值(int类型)
virtual errc_t setValueDouble(void *container, double value)=0
设置属性值(double类型)
virtual errc_t getValueInt(const void *container, int &value)=0
获取属性值(int类型)
virtual errc_t getValueString(const void *container, std::string &value)=0
获取属性值(String类型)
errc_t aFakeGet(const void *container, void *value)
模拟获取属性值的函数
定义 Property.cpp:26
errc_t aFakeSet(void *container, const void *value)
模拟设置属性值的函数
定义 Property.cpp:32
errc_t(* FPropertyGet)(const void *obj, void *value)
获取属性值的函数指针
定义 ReflectAPI.hpp:58
EValueType
定义 Property.hpp:36
@ eBool
bool类型
定义 Property.hpp:39
@ eString
std::string类型
定义 Property.hpp:40
@ eDouble
double类型
定义 Property.hpp:37
@ eInt
int类型
定义 Property.hpp:38