#include <string>
namespace refl {
	class UClass;
	class FieldPtr;
	class ObjectView {
	public:
		const char* ptr;
		const UClass* cls;
		const FieldPtr* cache{nullptr};
		ObjectView(void* ptr, const UClass* cls) : ptr((const char*)ptr), cls(cls){}
	public:

		template<typename T>
		bool Get(const Name& name, T& t);

		template<typename T>
		bool Set(const Name& name, const T& t);

		template<typename ...Args>
		bool Invoke(const Name& name, Args... args);

		template<typename R, typename ...Args>
		bool InvokeRet(const Name& name,R& ret, Args... args);
	};
}