This small header gives you the superpower of inspecting any kind of value in
C++11, providing output similar to Ruby's #inspect
.
If you define std::string inspect (void)
as method in your class, it will use
the whole output when inspecting.
If you define std::string to_string (void)
as method in your class, it will use
its output in this manner #<*type*: *output*>
.
If you define std::ostream& operator << (std::ostream& on, *type* value)
for your
class, it will act as it were a to_string
method.
The available functions are inspect::value
and inspect::type
, you can guess
what they do by their name, can't you?
"34"
#<foo:0x7ffff5e038c0>
#<bar: dabbah>
#<wat: I like trains>
#<union omg:0x7ffff5e03890>
23
#<enum derp: omg>
1.04719755
[[1, 2], [3, 4]]
(float*) 0x156
"\tlol\n\x01\"\xc3\x9f"
"\tlol\n\u0001\"\u00df"
true
#<function void(int): main::$_0>
#<function void(float): 0x4023d0>
#<function std::string(): @bar>
#<function void(): #<main::$_1: 1>>
By default it demangles type names using the cxxabi.h
header, it's not
available everywhere, so if you don't have it or don't want it make sure to
define NO_DEMANGLE
, the type names will be worse, but well, such is life.
On MSVC it uses dbghelp.lib
and Dbghelp.h
.
This header is released under WTFPL, so yeah, do whatever you want with it.