Selecionando uma função de membro com diferentes condições enable_if
Em C , enable_if é uma ferramenta usada para habilitar ou desabilitar condicionalmente determinado código com base em se um argumento de modelo atende a critérios específicos. Isso pode ser útil quando você deseja personalizar o comportamento de uma classe ou função com base em seus parâmetros de modelo.
No exemplo fornecido, o objetivo é criar uma função membro MyFunction que se comporte de maneira diferente dependendo se o modelo o parâmetro T é um número inteiro ou não. A implementação pretendida é usar duas sobrecargas de MyFunction, uma para T = int e outra para T != int.
Uma abordagem para conseguir isso é através de enable_if, conforme mostrado no código abaixo:
template
struct Point {
void MyFunction(
typename std::enable_if<:is_same int>::value, T >::type* = 0) {
std::cout ::value, float >::type* = 0) {
std::cout No entanto, este código resultará em erros de compilação devido ao uso incorreto de enable_if. Em C , a substituição dos argumentos do modelo ocorre durante a resolução da sobrecarga. Nesse caso, não há substituição porque o tipo de T é conhecido no momento da instanciação da função membro.
Para corrigir esse problema, um parâmetro de modelo fictício pode ser introduzido e padronizado como T, permitindo SFINAE (Falha de substituição não é um erro) para funcionar corretamente:
template
struct Point {
template
typename std::enable_if<:is_same int>::value>::type MyFunction() {
std::cout
typename std::enable_if<:is_same float>::value>::type MyFunction() {
std::cout Essa abordagem garante que a versão correta de MyFunction seja selecionada com base no valor de T.
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