C ++ - Vorlagen sind dafür berüchtigt, lange, unlesbare Fehlermeldungen zu generieren. Ich habe eine allgemeine Vorstellung davon, warum Vorlagenfehlermeldungen in C ++ so schlecht sind. Das Problem besteht im Wesentlichen darin, dass der Fehler erst ausgelöst wird, wenn der Compiler auf eine Syntax stößt, die von einem bestimmten Typ in einer Vorlage nicht unterstützt wird. Beispielsweise:
template <class T>
void dosomething(T& x) { x += 5; }
Wenn T
der +=
Operator nicht unterstützt wird, generiert der Compiler eine Fehlermeldung. Und wenn dies irgendwo tief in einer Bibliothek passiert, kann die Fehlermeldung Tausende von Zeilen lang sein.
C ++ - Templates sind jedoch im Wesentlichen nur ein Mechanismus für die Eingabe von Daten während der Kompilierung. Ein C ++ - Vorlagenfehler ist konzeptionell einem Laufzeitfehler sehr ähnlich, der in einer dynamischen Sprache wie Python auftreten kann. Betrachten Sie beispielsweise den folgenden Python-Code:
def dosomething(x):
x.foo()
Wenn x
hier keine foo()
Methode vorhanden ist, löst der Python-Interpreter eine Ausnahme aus und zeigt eine Stapelverfolgung zusammen mit einer ziemlich klaren Fehlermeldung an, die auf das Problem hinweist. Auch wenn der Fehler erst ausgelöst wird, wenn sich der Interpreter tief in einer Bibliotheksfunktion befindet, ist die Laufzeitfehlermeldung bei weitem nicht so schlimm wie das unlesbare Erbrochene, das von einem typischen C ++ - Compiler ausgegeben wird. Warum kann ein C ++ - Compiler nicht klarer sagen, was schief gelaufen ist? Warum führen einige Fehlermeldungen in C ++ - Vorlagen dazu, dass mein Konsolenfenster länger als 5 Sekunden gescrollt wird?
clang++
wink wink).