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");
}
War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top