Tôi đang chạy một mã trên GCC C++ trình biên dịch, để sản xuất các type_info :: tên:C++ filt không demangle tên typeid
#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';
}
nhưng tôi nhận được kết quả như sau:
P6Circle
P8triangle
và trên demangling,
./shape | c++filt
tôi nhận được đầu ra tương tự như trước đó. Bất kỳ giải pháp nào khác?
[Tên mangling] (http://refspecs.linux-foundation.org/cxxabi-1.83.html#mangling) cho các loại không phức tạp, và chắc chắn không phải trong trường hợp đó ... Tôi không biết câu trả lời cho câu hỏi của bạn là, nhưng cách giải quyết khác là tự mình đọc loại. Con trỏ 'P' đến đối tượng hình tròn' 6Circle' (6 là chiều dài của tên) ... 'P' trỏ đến tam giác' 8triangle' (8 ký tự). –
Hmm, điều đó thật đơn giản. Cảm ơn nhưng chỉ muốn biết nếu có một cách sạch hơn để nhận được cùng một –