#pragma once #include #include "convert.h" namespace refl { inline bool Convert::ToString(Any& dst, const Any& src) { if (src.cls == &TypeInfo::StaticClass) { std::construct_at(dst.CastTo(), src.CastTo()); return true; } return false; } inline bool Convert::ToInt32(Any& dst, const Any& src) { if (src.cls == &TypeInfo::StaticClass) { *dst.CastTo() = *src.CastTo(); return true; } return false; } inline bool Convert::ToFloat(Any& dst, const Any& src) { if (src.cls == &TypeInfo::StaticClass) { *dst.CastTo() = *src.CastTo(); return true; } return false; } inline bool Convert::Construct(Any& dst, const Any& src) { if (dst.cls->Construct((void*)dst.ptr, src)) { return true; } auto it = ClassMap.find(dst.cls); if (it == ClassMap.end()) { return false; } return it->second(dst, src); } inline ConvertMap Convert::BuildClassMap() { ConvertMap classMap; classMap.emplace(&TypeInfo::StaticClass, &ToString); classMap.emplace(&TypeInfo::StaticClass, &ToInt32); classMap.emplace(&TypeInfo::StaticClass, &ToInt32); classMap.emplace(&TypeInfo::StaticClass, &ToFloat); return classMap; } }