#include namespace refl { class UClass; class FieldPtr; class ObjectView { public: const char* ptr; const UClass* cls; const FieldPtr* cache{nullptr}; ObjectView(const void* ptr, const UClass* cls) : ptr((const char*)ptr), cls(cls){} public: template bool Get(const Name& name, T& t); template bool Set(const Name& name, const T& t); template bool Invoke(const Name& name, Args&&... args); template bool InvokeRet(const Name& name,R& ret, Args&&... args); }; class ArgsView { public: const void* val; const UClass* cls; ArgsView(const void* val = nullptr, const UClass* cls = nullptr) : val(val), cls(cls) {} bool ConvertTo(UClass* toClass); }; }