(1)获取类型名
1.typeid
使用方法:typeid(检测的变量名).name()
需要包含typeinfo.h
但是这种检查类型名的方式有一种很严重的缺陷,就是它的返回值很不完整。
我使用了typeid检查方式的代码:
#include<typeinfo.h>
#include<bits/stdc++.h>
using namespace std;
string str;
wstring wstr;
vector<int> veci;
map<double,int> mpdi;
queue<int> quei;
int int_i;
double double_d;
char char_c;
bool bool_b;
#define f(x) cout<<typeid(x).name()<<endl
int main(){
f(str);
f(wstr);
f(veci);
f(mpdi);
f(quei);
f(int_i);
f(double_d);
f(char_c);
f(bool_b);
}
输出是:
Ss
SbIwSt11char_traitsIwESaIwEE
St6vectorIiSaIiEE
St3mapIdiSt4lessIdESaISt4pairIKdiEEE
St5queueIiSt5dequeIiSaIiEEE
i
d
c
b
所以就可以用__cxa_demangle函数来规避这个问题。
2.__cxa_demangle
需要包含cxxabi.h
需要名字空间abi
使用方法:
te