2010-11-03 18 views
3

Je dois utiliser l'adresse d'un membre d'une classe de modèle dans l'assemblage en ligne g ++ (en tant que valeur de constante de compilation). Est-il possible d'exprimer cela? (Je pense que j'ai besoin du nom mutilé de T<U>::x).g ++ nom de modèle mangling

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

template < typename U > 
void f() { 
    asm ("somecommand T<U>::x"); 
} 

Répondre

1

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

nm --demangle foo.o vous donne les noms démêlés pour vos symboles nm --no-démo foo.o vous donne les noms mutilés pour vos symboles.

Ensuite, vous pouvez comparer la sortie de ces 2 fichiers pour faire correspondre le nom mutilé au nom démêlé.

0

j'utiliser objdump pour extraire le nom mutilée d'un objet dont il fait référence (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écifiez http://www.codesourcery.com/public/cxx-abi/abi.html et créez un mangler ou faites le mangling manuellement, mais c'est probablement exagéré).