De diferentes comparaciones entre plantillas C ++ y genéricos C # / Java como este:
Percibí que las plantillas de C ++ se implementan mediante algún tipo de preprocesamiento (reemplazo de texto sin formato antes del análisis), no compilando. Debido a que la comprobación de tipos en las plantillas de C ++ se parece a las macros de C. Quiero decir, si hay algunos errores, son errores del código generado después de procesar bloques de código con plantilla, no de las plantillas en sí. En otras palabras, son solo una especie de versión superior de macros en C.
Luego encontré algunos otros hechos que respaldan esto.
Pensé que si las plantillas de C ++ se implementan mediante preprocesamiento, habrá problemas con la vinculación dinámica (usando .dll). Y una búsqueda rápida en Google lo apoyó.
Otro punto es que las constantes enteras se pueden pasar como argumentos a las plantillas. E incluso admite algún tipo de recursión. Pero esta recursión no se encuentra en el ensamblado compilado / código de máquina. Lo de la recursividad se gestiona en tiempo de compilación al generar funciones para cada llamada recursiva y, por lo tanto, tener un binario ejecutable más grande pero más rápido.
Aunque a diferencia de las macros C, tiene algunas habilidades superiores. ¿Pero no se implementa la plantilla C ++ con algún tipo de preprocesamiento? ¿Cómo se implementa esto en diferentes compiladores de C ++?