Gibt es unter Verwendung von g ++ unter Linux eine Möglichkeit zu bestimmen, welche überladene oder Template-Funktion für eine bestimmte Anweisung ausgewählt wurde?kann der Compiler mir mitteilen, welche Überladungs- oder Template-Funktion er gewählt hat?
Genauer gesagt, ich gehe nicht davon aus, dass ich unbedingt alle möglichen Entscheidungen kenne, die in Header-Dateien aus verschiedenen Bibliotheken sein können. Und selbst wenn, würde ich nicht davon ausgehen, dass ich den entsprechenden Code ändern könnte.
http://stackoverflow.com/questions/1496497/how-can-i-see-parse-tree-intermediate-code-optimization-code-and-assembly-code könnte nützlich sein - dh, schau dir die Zwischenschritte des Compilers an. Ob Sie möchten das nur einmal tun, Sie könnten sich die generierten Objektdateien ansehen und vielleicht einen "Marker" -Funktionsaufruf um den Anruf herumlegen, den Sie verstehen wollen. Die Objektdatei zeigt an, wie der Symbolname der aufgerufenen Funktion lautet, die in die von Ihnen aufgerufene Funktionssignatur (die eindeutig sein sollte) vermerkt ist. – Yakk
Ich habe oft gesagt, dass wir einen Kompilierzeit-Debugger brauchen, damit Sie Template-Instanziierungen während der Auswertung durchgehen können, indem Sie sich Template-Argumente anschauen, um zu sehen, was wirklich vor sich geht. –
Wenn Sie sagen * sehen *, was meinst du genau? Clang ist berüchtigt dafür, eine voll ausgebildete AST für C++ zu erstellen, aber Sie müssten ein Programm um seine Bibliotheken schreiben, um "sehen" zu können. –