Drake
|
Obtains canonicalized, platform-independent, human-readable names for arbitrarily-complicated C++ types. More...
#include <drake/common/nice_type_name.h>
Static Public Member Functions | |
template<typename T > | |
static const std::string & | Get () |
Attempts to return a nicely demangled and canonicalized type name that is the same on all platforms, using Canonicalize(). More... | |
static std::string | Demangle (const char *typeid_name) |
Using the algorithm appropriate to the current compiler, demangles a type name as returned by typeid(T).name() , with the result hopefully suitable for meaningful display to a human. More... | |
static std::string | Canonicalize (const std::string &demangled_name) |
Given a compiler-dependent demangled type name string as returned by Demangle(), attempts to form a canonicalized representation that will be the same for any compiler. More... | |
Obtains canonicalized, platform-independent, human-readable names for arbitrarily-complicated C++ types.
Usage:
We demangle and attempt to canonicalize the compiler-generated type names as reported by typeid(T).name()
so that the same string is returned by all supported compilers and platforms. The output of NiceTypeName::Get<T>() is useful in error and log messages and testing. It also provides a persistent, platform-independent identifier for types; std::type_info
cannot provide that.
This class exists only to group type name-related static methods; don't try to construct an object of this type.
|
static |
Given a compiler-dependent demangled type name string as returned by Demangle(), attempts to form a canonicalized representation that will be the same for any compiler.
Unnecessary spaces and superfluous keywords like "class" and "struct" are removed. The NiceTypeName::Get<T>() method uses this function to produce a human-friendly type name that is the same on any platform.
|
static |
Using the algorithm appropriate to the current compiler, demangles a type name as returned by typeid(T).name()
, with the result hopefully suitable for meaningful display to a human.
The result is compiler-dependent.
|
inlinestatic |
Attempts to return a nicely demangled and canonicalized type name that is the same on all platforms, using Canonicalize().
This is an expensive operation but is only done once per instantiation of NiceTypeName::Get<T>() for a given type T
. The returned reference will not be deleted even at program termination, so feel free to use it in error messages even in destructors that may be invoked during program tear-down. You may safely ignore any valgrind complaints that this memory is still allocated at program termination.