C 11: Aliasing de função
Em C , a palavra-chave using pode ser usada para criar um alias para uma classe. No entanto, a mesma funcionalidade não está disponível diretamente para funções. Este artigo explora a questão de saber se o alias de função é possível e fornece uma solução usando encaminhamento perfeito.
Objetivo:
Determinar se é possível criar um alias para uma função em C e, em caso afirmativo, para encontrar o método mais limpo para fazer isso.
Declaração do problema:
Considere o seguinte código:
namespace bar
{
void f();
}
Gostaríamos de criar um alias chamado g para a função bar::f. No entanto, a seguinte tentativa resulta em um erro:
using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type
Solução:
Para criar um alias de função, podemos usar uma combinação de modelos e encaminhamento perfeito . Aqui está um exemplo de como isso pode ser alcançado:
template
auto g(Args&&... args) -> decltype(f(std::forward(args)...)) {
return f(std::forward(args)...);
}
Esta solução funciona criando uma função de modelo genérica que aceita qualquer número de argumentos. Em seguida, ele encaminha esses argumentos para a função original f usando encaminhamento perfeito. Isso garante que a função chamada receba os argumentos em sua forma original, independentemente de quaisquer conversões de tipo ou desreferências de ponteiro que possam ter sido aplicadas ao alias.
Observação:
Esta solução também funciona para funções e modelos de função sobrecarregados, garantindo que a função correta seja chamada com base nos argumentos fornecidos.
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