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

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 Plantilla de la clase de // A para expresar un interfaz de la comparación de la igualdad. clase de T> del templatede vuelta (b); } ¡operador del bool del amigo! ¡= (&a del const de T, &b) del const de T {vuelta! a.equal_to (b); } };

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 privado { público: const del equal_to del bool (lado derecho del const& del value_type); // que se definirá };

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 template operator== del bool (&a del const de T, &b) del const de T { /*… * }

esencialmente ser incompatible con otra definición como

lang=" del template operator== del bool (&a del const de Array, &b) del const de Array { /*… * }

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).

Cómo trabaja

Cuando el recopilador encuentra la expresión

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.

  • Zenithic
  • Alberta general election, 1930
    Random links:Piedra de afilar, Londres | Síndrome enfermo del edificio | El districto | Irracionalidad

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">