"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 invocar um modelo de função de membro a partir de uma função modelo requer a palavra-chave `template`?

Por que invocar um modelo de função de membro a partir de uma função modelo requer a palavra-chave `template`?

Publicado em 2024-11-06
Navegar:296

Why Does Invoking a Member Function Template from a Templated Function Require the `template` Keyword?

Função de membro da invocação de classe modelada a partir de função modelada

No trecho de código fornecido, invocar um modelo de função de membro de dentro de outro modelo resulta em um erro de compilação. Especificamente, o código tenta chamar A::f() de dentro de g(). No entanto, isso falha devido a um problema de sintaxe.

Para resolver isso, a palavra-chave do modelo deve ser especificada explicitamente antes da invocação da função membro. Isso ocorre porque, de acordo com o padrão C '03 14.2/4, quando o nome de uma especialização de modelo de membro aparece após uma expressão postfix ou um ID qualificado que depende de um parâmetro de modelo, o nome do modelo de membro deve ser prefixado com a palavra-chave do modelo .

Portanto, o código a seguir está correto:

template void g()
{
   A a;
   a.template f();  // Explicitly specify 'template' keyword
}

Ao adicionar a palavra-chave template, o compilador pode identificar corretamente que f é um modelo membro do modelo de classe A e pode chamar A::f() com êxito.

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