Używam kod w C++ GCC kompilatora, do wyprowadzania type_info :: nazwę:C++ filt nie demangle Imię 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';
}
ale uzyskać następujące wyniki:
P6Circle
P8triangle
i demangling,
./shape | c++filt
uzyskać taki sam efekt, jak wcześniej. Jakieś inne rozwiązanie?
[Name mangling] (http://refspecs.linux-foundation.org/cxxabi-1.83.html#mangling) dla typów nie jest aż tak skomplikowana, a na pewno nie w takim przypadku ... Nie wiem co odpowiedź na twoje pytanie jest, ale rozwiązaniem jest czytanie tego typu. 'P' wskaźnik do obiektu' 6Circle' Circle (6 to długość nazwy) ... 'Wskaźnik' P' do trójkąta '8triangle' (8 znaków). –
Hmm, to jest proste. Dzięki, ale po prostu chciałem się dowiedzieć, czy istnieje czystszy sposób na uzyskanie tego samego –