33 #ifndef GKO_CORE_NAME_DEMANGLING_HPP 34 #define GKO_CORE_NAME_DEMANGLING_HPP 37 #include <ginkgo/config.hpp> 39 #ifdef GKO_HAVE_CXXABI_H 41 #endif // GKO_HAVE_CXXABI_H 55 namespace name_demangling {
58 inline std::string get_type_name(
const std::type_info &tinfo)
60 #ifdef GKO_HAVE_CXXABI_H 62 const std::string name(
63 std::unique_ptr<
char[],
void (*)(
void *)>(
64 abi::__cxa_demangle(tinfo.name(),
nullptr,
nullptr, &status),
70 #endif // GKO_HAVE_CXXABI_H 71 return std::string(tinfo.name());
86 return get_type_name(
typeid(T));
101 return get_type_name(
typeid(t));
108 template <
typename T>
109 std::string get_enclosing_scope(
const T &)
111 auto name = get_type_name(
typeid(T));
112 auto found = name.rfind(
':');
113 if (found == std::string::npos) {
116 return name.substr(0, found - 1);
136 #define GKO_FUNCTION_NAME gko::name_demangling::get_enclosing_scope([] {}) 143 #endif // GKO_CORE_NAME_DEMANGLING_HPP The Ginkgo namespace.
Definition: abstract_factory.hpp:45
std::string get_dynamic_type(const T &t)
This function uses name demangling facilities to get the name of the dynamic type of the object passe...
Definition: name_demangling.hpp:99
std::string get_static_type(const T &)
This function uses name demangling facilities to get the name of the static type (T) of the object pa...
Definition: name_demangling.hpp:84