#pragma once #include #include #include #include // Consider using TypeName function family. TString CppDemangle(const TString& name); // TypeName function family return human readable type name. TString TypeName(const std::type_info& typeInfo); TString TypeName(const std::type_index& typeInfo); // Works for types known at compile-time // (thus, does not take any inheritance into account) template inline TString TypeName() { return TypeName(typeid(T)); } // Works for dynamic type, including complex class hierarchies. // Also, distinguishes between T, T*, T const*, T volatile*, T const volatile*, // but not T and T const. template inline TString TypeName(const T& t) { return TypeName(typeid(t)); }