我正在上GCC C++編譯器代碼,輸出TYPE_INFO ::名不還原函數typeid的名字:C++ filt的不
#include <iostream>
#include <typeinfo>
using namespace std;
class shape {
protected:
int color;
public:
virtual void draw() = 0;
};
class Circle: public shape {
protected:
int color;
public:
Circle(int a = 0): color(a) {};
void draw();
};
void Circle::draw() {
cout<<"color: "<<color<<'\n';
}
class triangle: public shape {
protected:
int color;
public:
triangle(int a = 0): color(a) {};
void draw();
};
void triangle::draw() {
cout<<"color: "<<color<<'\n';
}
int main() {
Circle* a;
triangle* b;
cout<<typeid(a).name()<<'\n';
cout<<typeid(b).name()<<'\n';
}
,但我得到的結果如下:
P6Circle
P8triangle
和demangling,
./shape | c++filt
我得到了相同的輸出更早。其他解決方案?
[Name mangling](http://refspecs.linux-foundation.org/cxxabi-1.83.html#mangling)對於類型來說並不那麼複雜,當然也不是這種情況......我不知道是什麼你的問題的答案是,但一個解決方法是自己讀取類型。指向'6Circle'圓對象的'P'指針(6是名字的長度)...指向'8triangle'三角形的'P'指針(8個字符)。 –
嗯,那很簡單。謝謝,但只是想知道是否有一個更清晰的方式獲得相同的 –