"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo definir relaciones de amistad en clases de plantilla con diferentes argumentos de plantilla?

¿Cómo definir relaciones de amistad en clases de plantilla con diferentes argumentos de plantilla?

Publicado el 2024-11-18
Navegar:965

How to Define Friend Relationships in Template Classes with Different Template Arguments?

Profundizando en las plantillas de clase con amigos de clase de plantilla

Al definir una clase de árbol binario (BT) y su clase de elemento (BE), es Es necesario establecer una relación de amistad para que BT acceda a los miembros privados de BE. Sin embargo, es fundamental comprender la mecánica subyacente para definir la relación correctamente.

Originalmente, intentaste declarar la relación de amigo como plantilla clase de amigo BT. Pero esta sintaxis introduce un conflicto de nombres con el parámetro de plantilla de BE. Los parámetros de plantilla dentro de las plantillas anidadas deben tener nombres distintos.

En su lugar, debes usar diferentes nombres de parámetros de plantilla, como:

template class BE {
  template friend class BT;
};

Esta declaración indica que cualquier clase BT, independientemente de sus argumentos de plantilla, es amiga de todas las clases BE con argumentos de plantilla coincidentes.

Considere los siguientes ejemplos para aclarar aún más los diferentes tipos de relaciones de amistad:

template
struct foo {
  template
  friend class bar;
};

En este caso, bar es amigo de foo independientemente de los argumentos de la plantilla de bar. Cualquier especialización de bar sería amiga de cualquier especialización de foo.

template
struct foo {
  friend class bar;
};

Aquí, bar solo es amigo de foo si el argumento de su plantilla coincide con el de foo. Entonces, solo bar sería amigo de foo.

En su escenario específico, la clase de amigo bar; debería ser suficiente ya que permite que cualquier especialización de la barra acceda a los miembros privados de BE siempre que su argumento de plantilla coincida con la clase BE correspondiente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3