"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 > Por que uma classe modelo precisa declarar uma classe modelo amiga com um parâmetro de modelo diferente?

Por que uma classe modelo precisa declarar uma classe modelo amiga com um parâmetro de modelo diferente?

Publicado em 13/11/2024
Navegar:889

Why Does a Templated Class Need to Declare a Friend Templated Class with a Different Template Parameter?

Classe modelo com classe modelo de amigo: decifrando a mecânica

Neste cenário, você está definindo um modelo de classe de árvore binária (BT) e um modelo de classe (BE ) que representa um elemento da árvore. Você encontra um requisito peculiar para declarar o modelo de amigo como BT em vez de BT. Uma investigação sobre esse comportamento leva a uma compreensão completa dos modelos de classe e relacionamentos de amigos.

Modelos aninhados e sombreamento

Inicialmente, você tenta declarar o modelo de amigo como modelo classe de amigo TB;. No entanto, isso é proibido porque os parâmetros dos modelos aninhados não podem ter o mesmo nome. Os modelos aninhados devem utilizar nomes de parâmetros de modelo distintos.

Definindo relacionamentos de amizade

Quando você declara o modelo Friend Class BT;, você estabelece um relacionamento de amizade entre BT e BE, independentemente do argumentos de modelo de BT. Isso significa que qualquer instanciação de BT pode acessar os membros privados de qualquer instanciação de BE.

Se você deseja restringir o relacionamento de amizade apenas às instanciações de BT que utilizam o mesmo argumento de modelo de BE, você deve declarar o amigo da seguinte maneira:

template friend class bar;

No seu caso específico, declarando friend class bar; dentro da classe BE deve ser suficiente.

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