example1_name_demangling.cpp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cxxabi.h>
#include <memory>
#include <typeinfo>

template <typename T>
std::string demangle_type_name(const char* mangled_name) {
    int status;
    std::unique_ptr<char, void(*)(void*)> result(
        abi::__cxa_demangle(mangled_name, nullptr, nullptr, &status),
        std::free
    );
    return (status == 0) ? result.get() : mangled_name;
}

class MyClass {};

int main() {
    std::cout << "Mangled name: " << typeid(MyClass).name() << std::endl;
    std::cout << "Demangled name: " << demangle_type_name<MyClass>(typeid(MyClass).name()) << std::endl;

    return 0;
}
Back to cxxabi.h