tags:

views:

264

answers:

2

On my Ubuntu computer, when I ask for an object/variable's type using typeid, I get a weird-looking name using the type_info::name method. (By "weird" I mean that it's different from what I'd expect to get on Windows.)

I Googled around a bit, and found out that RTTI names are implementation-specific. Problem is, I want to get a type's name as it would be returned on Windows. Is there an easy way to do this?

+4  A: 

If it's what you're asking, there is no compiler switch that would make gcc behave like msvc regarding the name returned by type_info::name().

However, in your code you can rely on the gcc specific __cxa_demangle function.

There is in fact an answer on SO that addresses your problem.

Reference: libstdc++ manual, Chapter 40. Demangling.

Gregory Pakosz
+1  A: 

c++ function names really include all the return and argument type information as well as the class and method name. When compiled, they are 'mangled' into a standard form (standard for each compiler) that can act as an assembler symbol and includes all the type information.

You need to run a function or program to reverse this mangling, called a demangler.

try running

c++filt myoutput.txt

on the output of the function. This demangles the real symbol name back into a human readable form.

Alex Brown