Aus verschiedenen Vergleichen zwischen C ++ - Vorlagen und C # / Java-Generika wie diesem
Ich habe die Vorstellung, dass C ++ - Vorlagen durch eine Art Vorverarbeitung (Ersetzen von einfachem Text vor dem Parsen) implementiert und nicht kompiliert werden. Da die Typüberprüfung in C ++ - Vorlagen C-Makros ähnelt. Ich meine, wenn es einige Fehler gibt, handelt es sich um Fehler aus dem generierten Code nach der Verarbeitung von Codeblöcken mit Vorlagen, nicht aus den Vorlagen selbst. Mit anderen Worten, sie sind nur eine Art obere Version von Makros in C.
Dann fand ich einige andere Fakten, die dies unterstützen.
Ich dachte, wenn C ++ - Vorlagen durch Vorverarbeitung implementiert werden, wird es Probleme mit der dynamischen Verknüpfung (mit DLL) geben. Und ein schnelles googeln unterstützte dies.
Ein weiterer Punkt ist, dass Integer-Konstanten als Argumente an die Vorlagen übergeben werden können. Und es unterstützt sogar eine Art Rekursion. Diese Rekursion ist jedoch nicht im kompilierten Assembly- / Maschinencode enthalten. Die Rekursionssache wird in der Kompilierungszeit verwaltet, indem für jeden rekursiven Aufruf eine Funktion generiert wird und somit eine größere, aber schneller ausführbare Binärdatei vorliegt.
Im Gegensatz zu C-Makros verfügt es über einige überlegene Fähigkeiten. Aber ist C ++ Template nicht mit einer Art Vorverarbeitung implementiert? Wie ist dies in verschiedenen C ++ - Compilern implementiert?