"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 > O C++ pode deduzir tipos de modelo a partir de tipos de retorno de função?

O C++ pode deduzir tipos de modelo a partir de tipos de retorno de função?

Publicado em 2024-11-10
Navegar:135

Can C   Deduce Template Types from Function Return Types?

Dedução de modelo com base no tipo de retorno de função em C

Em C , pode ser desejável utilizar a dedução de modelo para simplificar o código que instancia genérico funções com base nos tipos de dados dos argumentos da função. Considere o seguinte exemplo:

GCPtr ptr1 = GC::Allocate();
GCPtr ptr2 = GC::Allocate();

Em vez de especificar explicitamente os parâmetros de tipo genérico, o objetivo é obter essa dedução usando o tipo de retorno da função GC::Allocate(). No entanto, C não permite dedução de tipo com base no tipo de retorno.

class GC
{
public:
    template
    static GCPtr Allocate();
};

Apesar do tipo de retorno ser genérico, o compilador requer a especificação explícita dos parâmetros de tipo de modelo e ao instanciar a função GC::Allocate().

Para mitigar esta limitação, uma função auxiliar pode ser introduzida:

template 
void Allocate(GCPtr& p) {
    p = GC::Allocate();
}

Usando esta função, o objetivo original pode ser alcançado da seguinte forma:

GCPtr p;
Allocate(p);

Se esta sintaxe oferece alguma vantagem significativa sobre a especificação de tipo explícita é subjetivo.

Nota: Em C 11, é possível omitir um das declarações de tipo usando a palavra-chave auto:

auto p = GC::Allocate(); // p is of type GCPtr
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