Skip to content
Snippets Groups Projects
classname.hh 1.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    // vi: set et ts=4 sw=2 sts=2:
    #ifndef DUNE_CLASSNAME_HH
    #define DUNE_CLASSNAME_HH
    
    /** \file
     * \brief A free function to provide the demangled class name
    
     *        of a given object or type as a string
    
    #include <string>
    #include <typeinfo>
    
    
    #endif // #if HAVE_CXA_DEMANGLE
    
    
    namespace Dune {
    
      /** \brief Provide the demangled class name of a given object as a string */
      template <class T>
    
      std::string className ( T &t )
    
        std::string className = typeid( t ).name();
    
        char *demangled = abi::__cxa_demangle( className.c_str(), 0, 0, &status );
        if( demangled )
        {
          className = demangled;
          std::free( demangled );
        }
    
    #endif // #if HAVE_CXA_DEMANGLE
    
      /** \brief Provide the demangled class name of a type T as a string */
      template <class T>
    
        std::string className = typeid( T ).name();
    
        char *demangled = abi::__cxa_demangle( className.c_str(), 0, 0, &status );
        if( demangled )
        {
          className = demangled;
          std::free( demangled );
        }
    
    #endif // #if HAVE_CXA_DEMANGLE