ich einen Code auf GCC C++ Compiler zur Ausgabe läuft die type_info :: name:C++ filt nicht demangle typeid Name
#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';
}
aber ich habe folgende Ergebnisse:
P6Circle
P8triangle
und auf Demangling,
./shape | c++filt
ich die gleiche Ausgabe wie früher. Irgendeine andere Lösung?
[Name Mangling] (http://refspecs.linux-foundation.org/cxxabi-1.83.html#mangling) für Typen ist nicht so kompliziert, und sicherlich nicht in diesem Fall ... Ich weiß nicht was Die Antwort auf Ihre Frage ist, aber ein Workaround ist das Lesen des Typs selbst. 'P'-Zeiger auf' 6Circle' Kreis-Objekt (die 6 ist die Länge des Namens) ... 'P'-Zeiger auf' 8Dreieck'-Dreieck (8 Zeichen). –
Hmm, das ist einfach. Danke, aber wollte nur wissen, ob es eine sauberere Möglichkeit gibt, das gleiche zu bekommen –