Pour bien déboguer des macros complexes en c ++, j'utilise généralement le préprocesseur afin de voir exactement à quoi ressemble le code obtenu.
Existe-t-il une méthode similaire pour "prétraiter" le code de modèle?
Pour bien déboguer des macros complexes en c ++, j'utilise généralement le préprocesseur afin de voir exactement à quoi ressemble le code obtenu.
Existe-t-il une méthode similaire pour "prétraiter" le code de modèle?
Un moyen (dépendant du compilateur) consiste à utiliser le dumping après chaque étape du compilateur. J'ai écrit un petit programme:
template<class T>
T square(T n)
{
return n * n;
}
int main(void)
{
square<int>(3);
square<float>(3.0);
}
puis:
g++ -fdump-rtl-all test.cc
Cela me donne un tas de fichiers. Jetez un coup d'oeil à (dans mon cas) test.cc.218.dfinish:
;; Function int main() (main)
;; Function T square(T) [with T = int] (_Z6squareIiET_S0_)
;; Function T square(T) [with T = float] (_Z6squareIfET_S0_)
J'ai une demi-âne réponse seulement.
Je ne sais pas de manière à obtenir effectivement la source C++ (déjà existant), mais le compilateur CLang dispose d'une option d' -emit-ast
qui vidages de l'Arbre de Syntaxe Abstraite utilisée pour représenter l'analyse de la langue. Les différentes instanciations du modèle seront représentés.
L'AST est représenté à la fois dans la mémoire et dans le fichier xml version, de sorte que vous pouvez:
Pour la plupart des inspections de code (y compris la vérification de l'surcharges sélectionné), j'ai trouvé qu'en fait la lecture de la sortie XML (bien, grepping à travers elle) était suffisante pour mes besoins.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.