El truco de Barton-Nackman del es un término acuñado por el comité de la estandardización de C++ (ISO /IEC JTC1 SC22 WG21) para referir a un idioma introducido por Juan Barton y Lee Nackman como extensión restringida de la plantilla.
El idioma es caracterizado por una definición de función del amigo de la en-clase que aparece en el componente de la plantilla de la clase baja del patrón (CRTP) de la plantilla curiosamente que se repite.
lang=" del value_type de la clase ¡El value_type de la clase de // quiere tener == y! =, así que él deriva de // equal_comparable consigo mismo como discusión (que es el CRTP). : equal_comparable
Cuando una plantilla de la clase como equal_comparable se ejemplifica, las definiciones del amigo de la en-clase producen las funciones de nontemplate (y no miembro) (funciones del operador en este caso). Cuando el idioma fue introducido (1994) la lengua de C++ no definió pedir parcial para las plantillas sobrecargadas de la función y consecuentemente sobrecargar plantillas de la función dio lugar a menudo a ambigüedades. Por ejemplo, el intentar capturar una definición genérica para operator== como
lang=" del
esencialmente ser incompatible con otra definición como
lang=" del
El truco de Barton-Nackman, entonces, alcanza la meta de proporcionar a un operador de igualdad definido por el usario genérico sin tener que ocuparse de tales ambigüedades. El adjetivo restringido en el nombre del idioma refiere al hecho de que la definición de función proporcionada de la en-clase está restringida (se aplica solamente) a las especializaciones de la plantilla dada de la clase.
El término se utiliza a veces equivocadamente para referir al patrón (CRTP) de la plantilla curiosamente que se repite. Según lo explicado arriba, el truco de Barton-Nackman es un idioma distinto (que confía en el CRTP).
v1 == v2
donde están v1 y v2 del tipo value_type, intenta las operaciones de búsqueda dependientes (ADL) de la discusión para operator==. Estas operaciones de búsqueda incluyen la consideración de las funciones del amigo declaradas en value_type y sus clases bajas. (Nota que si value_type fueran un caso incompleto de la plantilla, ADL accionaría su particularización completa.)
El truco de Barton-Nackman confió original no en el ADL pero en a (ahora obsoleta) C++ la característica llamó el " injection" conocido del amigo;, en que una declaración de la en-clase de una función del amigo hizo el nombre de función visible en el alcance inmediatamente circundante del namespace (posiblemente el alcance global). Al investigar la posibilidad de quitar la inyección conocida del amigo del lenguaje de programación de C++, el idioma de Barton y de Nackman fue encontrado para ser el único uso razonable de esa regla de lengua. Eventual, las reglas para las operaciones de búsqueda discusión-dependientes fueron ajustadas para substituir la inyección conocida del amigo por un mecanismo menos drástico, descrito arriba, que mantuvo la validez de la técnica de Barton y de Nackman. Vale el observar de que, como consecuencia de este cambio, la expresión
:: operator== (v1, v2)
es no más válido, porque los nombres calificados no están conforme al ADL y las declaraciones no encuentran del amigo vía operaciones de búsqueda ordinarias. Observar que esto implica que el comitente de friend es esencial, incluso si las funciones definidas del amigo no necesitan realmente tener acceso a miembros privados de la clase befriending.
| Random links: | Piedra de afilar, Londres | Síndrome enfermo del edificio | El districto | Irracionalidad |