g ++ Template-Namen Mangeln
-
28-09-2019 - |
Frage
Ich brauche die Adresse eines Mitglieds einer Template-Klasse zu verwenden, in g ++ Inline-Assembler (als Übersetzungszeit konstanter Wert). Ist es möglich, dies zum Ausdruck zu bringen? (Ich glaube, dass ich die verstümmelten Namen T<U>::x
benötigen).
template < typename U >
struct T {
static int x;
};
template < typename U >
void f () {
asm ("somecommand T<U>::x");
}
Lösung
Angenommen, Sie Linux verwenden, können Sie nm verwendet werden.
nm --demangle foo.o gibt Ihnen die demangled Namen für Ihre Symbole nm --no-demangle foo.o Sie die entstellten Namen für Ihre Symbole gibt.
Dann können Sie die Ausgabe dieser zwei Dateien vergleichen, die verstümmelten Namen den demangled Namen übereinstimmen.
Andere Tipps
Ich würde objdump
verwenden, um die verstümmelten Namen von einem Objekt zu extrahieren, welche Referenzen er (Sie c++filt
verwenden können, in der anderen Richtung zu gehen, aber ich kenne kein eigenständiges Programm, das verstümmelte Namen zu geben, man muss die Spezifikation verwenden könnte http://www.codesourcery.com/public/cxx-abi/abi.html und erstellt die Mangeln manuell mangler oder tun, aber das ist wahrscheinlich übertrieben).