Question

I besoin d'utiliser l'adresse d'un membre d'une catégorie de modèle en g ++ assembleur en ligne (comme une valeur de constante de temps de compilation). Est-il possible d'exprimer? (Je pense que je dois le nom de mutilée T<U>::x).

template < typename U >
struct T {
  static int x;
};

template < typename U >
void f () {
  asm ("somecommand T<U>::x");
}
Était-ce utile?

La solution

En supposant que vous utilisez Linux, vous pouvez utiliser nm.

nm --demangle foo.o vous donne les noms demangled pour vos symboles nm --no-demangle foo.o vous donne les noms tronqués pour vos symboles.

Ensuite, vous pouvez comparer la sortie de ces 2 fichiers de faire correspondre le nom mutilée au nom demangled.

Autres conseils

J'utiliser objdump pour extraire le nom estropié d'un objet références (vous pouvez utiliser c++filt pour aller dans l'autre sens, mais je ne connais pas de programme autonome donnant le nom mutilée, vous pouvez utiliser la spécification http://www.codesourcery.com/public/cxx-abi/abi.html et crée un mangler ou faire le mutiler manuellement, mais c'est probablement exagéré).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top