¿Qué significa que el compilador usa la búsqueda en dos fases para compilar la clase de plantilla?Búsqueda en dos fases: se necesita una explicación
Respuesta
plantillas se compilan (al menos) dos veces:
Sin instanciación del código de la plantilla en sí se comprueba la sintaxis.
Ej: cualquier error de sintaxis errores tales como;
etc.En el momento de la instanciación (cuando se conoce el tipo exacto), el código de la plantilla se comprueba de nuevo para asegurar que todas las llamadas son válidos para ese tipo particular.
Por ejemplo: la plantilla puede incorporar llamadas a funciones que pueden no estar presentes para ese tipo en particular.
Esto se llama como Two Phase Lookup.
También tenga en cuenta que la búsqueda de nombres no dependientes se realiza en la primera fase, mientras que la búsqueda de nombres que dependen de un parámetro de plantilla se realiza en el segundo fase. El significado es que si llama a 'sqrt (1)', entonces 'sqrt' necesita ser declarado antes de que se defina la plantilla. Pero si llama a 'sqrt (t)', donde 't' es una instancia de un tipo que es un parámetro de plantilla, entonces' sqrt' no necesita estar visible hasta que se cree una instancia de la plantilla. MSVC no solía hacer esto correctamente: aún así podría no ser lo que sé. –
De todos modos, es por eso que se llama búsqueda * de dos fases * en lugar de solo compilación de dos fases o algo así. Se supone que la primera fase debe hacer más que simplemente verificar la sintaxis, pero MS tuvo algunas dificultades para implementar la primera fase de búsqueda, por lo que lo hicieron todo en la instanciación: http://stackoverflow.com/questions/6273176/what-excaly-is -broken-with-microsoft-visual-cs-two-phase-template-instantia –
@SteveJessop: Eso suena más parecido: la clave es la parte de "búsqueda" de la búsqueda de dos fases. ¡Gracias! –
- 1. Haskell - ¿Currying? Necesita más explicación
- 2. Grand Central Dispatch (GCD) vs. performSelector - necesita una mejor explicación
- 3. Necesita Explicación de couchdb reducir la función
- 4. Necesita una explicación para este boost :: asio timer example
- 5. Controlador frente a modelo - Necesita explicación
- 6. Necesita una explicación simple del método de inyección
- 7. necesita explicación con respecto destrucción doble de excepción objetos
- 8. ¿Commite dos fases contra fallas de confirmación final?
- 9. Objeto C Construcción de dos fases de los objetos
- 10. Linux embebido - Fases de arranque
- 11. ¿Los punteros inteligentes excluyen la necesidad de una construcción en dos fases?
- 12. Fases del evento Flash?
- 13. búsqueda dos mesas
- 14. Necesita una ayuda para escribir la consulta de búsqueda
- 15. Explicación del operador de dos puntos en ": $ {foo = value}"
- 16. Cómo extender una clase sellada - necesita explicación y uso simple del programa en tiempo real
- 17. Se necesita ayuda con una consulta SQL
- 18. EditText necesita hacer clic dos veces para abrir el cuadro de diálogo de búsqueda
- 19. MySQL Resultado de búsqueda de texto completo Explicación
- 20. Procesamiento en dos fases: No generar etiquetas vacías desde la fase 1 Procesamiento XSLT 2.0
- 21. ¿Azure SQL Database es compatible con la confirmación en dos fases (2PC)?
- 22. Explicación visual ¿Se necesita una guía para revertir el código de la estructura de la lista vinculada?
- 23. protocolo de confirmación de 3 fases
- 24. Se requieren dos clics cuando solo se necesita uno en el iPad/iPhone
- 25. Varios puntos y el mismo signo en el archivo MAKE (necesita explicación)
- 26. ¿Qué se necesita para hacer una "compilación"?
- 27. Compromiso de dos fases: ¿cómo utilizar mi cola de forma efectiva?
- 28. Breve explicación de los dos últimos capítulos de SICP
- 29. Necesita patrón para la búsqueda dinámica de varias tablas sql
- 30. ¿Una explicación simple de Rings en Riak?
@Nawaz He escuchado solo acerca de la búsqueda de dos fases, ¿hay algo que me falta? – smallB
Un breve y útil artículo sobre el tema se puede encontrar en http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.html –
Véase también http://stackoverflow.com/a/10171507/76722 y http://stackoverflow.com/a/7241548/76722 –