De diferentes comparações entre modelos C ++ e genéricos C # / Java como este
Percebi que os modelos C ++ são implementados por algum tipo de pré-processamento (substituição de texto sem formatação antes da análise), não compilando. Porque a verificação de tipo nos modelos C ++ é semelhante às macros C. Quero dizer, se houver alguns erros, eles são erros do código gerado após o processamento de blocos de código modelados, não dos próprios modelos. Em outras palavras, eles são apenas um tipo de versão superior de macros em C.
Então eu encontrei alguns outros fatos que apóiam isso -
Eu pensei que, se os modelos de C ++ forem implementados por pré-processamento, haverá problemas com o vínculo dinâmico (usando .dll). E uma pesquisa rápida apoiou isso.
Outro ponto é que constantes inteiras podem ser passadas como argumentos para os modelos. E ainda suporta algum tipo de recursão. Mas essa recursão não é encontrada no código de montagem / máquina compilado. A coisa da recursão é gerenciada em tempo de compilação, gerando funções para cada chamada recursiva e, portanto, tendo um binário executável maior, mas mais rápido.
Embora diferente das macros C, ele possui algumas habilidades superiores. Mas o modelo C ++ não é implementado com algum tipo de pré-processamento? Como isso é implementado em diferentes compiladores C ++?