#pragma once #include #include "field.h" namespace refl { //存入的是真实的数据类型,type用于拷贝数据 struct AnyValue : public Any { const UClass* type; constexpr AnyValue() :Any(), type(nullptr) {} template constexpr AnyValue(T&& t) : Any(t), type(&TypeInfo>::StaticClass){} }; struct MemberDataValue { Offset offset{0}; AnyValue value; AnyValue meta; constexpr MemberDataValue() :value(), meta() {} constexpr MemberDataValue(const AnyValue& value, const AnyValue& meta = {}) : value(value), meta(meta) {} }; struct MethodDataValue { Method fptr{nullptr}; sarray value; AnyValue meta; constexpr MethodDataValue() :value(), meta() {} constexpr MethodDataValue(const sarray& value, const AnyValue& meta = {}) : value(value), meta(meta) {} }; struct AnyValueList{ void* data; int num; bool isMemoryOwner{false}; AnyValueList(const sarray& args,void* memory = nullptr); ~AnyValueList(); void ConvertArgs(sarray params); const sarray ToSArray(); constexpr static int GetArgsSize(const sarray& args); }; class AnyView : public Any{ public: const FieldPtr* cache{ nullptr }; AnyView(const void* ptr, const UClass* cls) : Any(ptr,cls) {} public: template bool Get(const Name& name, T& t); template bool Set(const Name& name, const T& t); bool Invoke(const Name& name,const sarray& ArgsList); bool Invoke(const Name& name,svector& ArgsList); AnyView Parent(); }; }