Da diversi confronti tra modelli C ++ e generici C # / Java come questo-
Ho capito che i modelli C ++ sono implementati da una sorta di pre-elaborazione (sostituzione del testo normale prima dell'analisi), non compilazione. Perché il controllo del tipo nei modelli C ++ assomiglia alle macro C. Voglio dire, se ci sono alcuni errori, sono errori dal codice generato dopo l'elaborazione dei blocchi di codice modello, non dai modelli stessi. In altre parole, sono solo una specie di versione superiore di macro in C.
Poi ho trovato alcuni altri fatti a sostegno di questo-
Ho pensato, se i modelli C ++ sono implementati tramite preelaborazione, ci saranno problemi con il collegamento dinamico (usando .dll). E una rapida ricerca su Google ha supportato questo.
Un altro punto è che le costanti intere possono essere passate come argomenti ai template. E supporta anche una sorta di ricorsione. Ma questa ricorsione non si trova nel codice assembly / machine compilato. La cosa ricorsione è gestita in tempo di compilazione generando una funzione per ogni chiamata ricorsiva e quindi avendo un binario eseguibile più grande ma più veloce.
Sebbene diversamente dalle macro C, ha alcune abilità superiori. Ma il modello C ++ non è implementato con una sorta di pre-elaborazione? Come viene implementato in diversi compilatori C ++?