#pragma once #include #include namespace sp { template std::string GetBasicClassName(const T& a_Value) { int status; char* demangled = abi::__cxa_demangle(typeid(a_Value).name(), 0, 0, &status); if (status != 0) return ""; return std::string(demangled); } template std::string GetBasicClassName() { int status; char* demangled = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status); if (status != 0) return ""; return std::string(demangled); } template struct Reflector { static std::string GetClassName() { return GetBasicClassName(); } }; template <> struct Reflector { static std::string GetClassName() { return "std::string"; } }; template struct Reflector> { static std::string GetClassName(); }; template struct Reflector> { static std::string GetClassName(); }; template std::string Reflector>::GetClassName() { return "std::vector<" + Reflector::GetClassName() + ">"; } template std::string Reflector>::GetClassName() { return "std::map<" + Reflector::GetClassName() + ", " + Reflector::GetClassName() + ">"; } } // namespace sp