毎回デマングルの方法を調べて使うのがめんどうなので、ラップした。デバッグ用。環境ごとに型名を統一的な表記にすることは目的にしていない。
libstdc++とlibc++の環境で、abi::__cxa_demangle()
関数を使って型名をデマングルする。メモリリークしないように、かつ例外安全にしてある。
宣言:
// <shand/demangle_typename.hpp> namespace shand { template <class T> std::string demangle_typename(); }
サンプル:
#include <iostream> #include <vector> #include <shand/demangle_typename.hpp> int main() { std::cout << shand::demangle_typename<int>() << std::endl; std::cout << shand::demangle_typename<std::vector<int>>() << std::endl; }
出力例:
int std::vector<int, std::allocator<int> >