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