"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como definir relacionamentos de amizade em classes de modelo com diferentes argumentos de modelo?

Como definir relacionamentos de amizade em classes de modelo com diferentes argumentos de modelo?

Publicado em 2024-11-18
Navegar:443

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

Aprofundando-se em modelos de classe com amigos de classe de modelo

Ao definir uma classe de árvore binária (BT) e sua classe de elemento (BE), é necessário estabelecer uma relação de amizade para que a BT tenha acesso aos membros privados da BE. No entanto, é crucial entender a mecânica subjacente para definir o relacionamento corretamente.

Originalmente, você tentou declarar o relacionamento de amizade como template Friend Class BT. Mas esta sintaxe introduz um conflito de nomenclatura com o parâmetro de modelo do BE. Os parâmetros de modelo dentro de modelos aninhados devem ter nomes distintos.

Em vez disso, você deve usar nomes de parâmetros de modelo diferentes, como:

template class BE {
  template friend class BT;
};

Esta declaração indica que qualquer classe BT, independentemente de seus argumentos de modelo, é amiga de todas as classes BE com argumentos de modelo correspondentes.

Considere os exemplos a seguir para esclarecer melhor os diferentes tipos de relacionamentos de amizade:

template
struct foo {
  template
  friend class bar;
};

Neste caso, bar é amigo de foo independentemente dos argumentos do modelo bar. Qualquer especialização de bar seria amiga de qualquer especialização de foo.

template
struct foo {
  friend class bar;
};

Aqui, bar só é amigo de foo se seu argumento de modelo corresponder ao de foo. Portanto, apenas bar seria amigo de foo.

No seu cenário específico, friend class bar; deve ser suficiente, pois permite que qualquer especialização de bar acesse os membros privados do BE, desde que seu argumento de modelo corresponda à classe BE correspondente.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3