54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
#pragma once
|
|
#include <string>
|
|
#include "field.h"
|
|
namespace refl {
|
|
//存入的是真实的数据类型,type用于拷贝数据
|
|
struct AnyValue : public Any {
|
|
const UClass* type;
|
|
constexpr AnyValue() :Any(), type(nullptr) {}
|
|
template<typename T>
|
|
constexpr AnyValue(T&& t) : Any(t), type(&TypeInfo<args_type_t<T>>::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<AnyValue> value;
|
|
AnyValue meta;
|
|
constexpr MethodDataValue() :value(), meta() {}
|
|
constexpr MethodDataValue(const sarray<AnyValue>& value, const AnyValue& meta = {}) : value(value), meta(meta) {}
|
|
};
|
|
struct AnyValueList{
|
|
void* data;
|
|
int num;
|
|
bool isMemoryOwner{false};
|
|
AnyValueList(const sarray<AnyValue>& args,void* memory = nullptr);
|
|
~AnyValueList();
|
|
void ConvertArgs(sarray<const UClass*> params);
|
|
const sarray<Any> ToSArray();
|
|
constexpr static int GetArgsSize(const sarray<AnyValue>& args);
|
|
};
|
|
class AnyView : public Any{
|
|
public:
|
|
const FieldPtr* cache{ nullptr };
|
|
AnyView(const void* ptr, const UClass* cls) : Any(ptr,cls) {}
|
|
public:
|
|
|
|
template<typename T>
|
|
bool Get(const Name& name, T& t);
|
|
|
|
template<typename T>
|
|
bool Set(const Name& name, const T& t);
|
|
|
|
bool Invoke(const Name& name,const sarray<Any>& ArgsList);
|
|
|
|
bool Invoke(const Name& name,svector<Any>& ArgsList);
|
|
|
|
AnyView Parent();
|
|
};
|
|
} |