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