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