Compreendendo std::enable_if: Decifrando seu propósito e implementação
Embora a natureza de std::enable_if seja compreendida em certos contextos, seu complexidades, particularmente o segundo argumento e a atribuição a std::enable_if dentro da instrução do modelo, permanecem enigmáticas. Aprofundar-se em seu funcionamento irá desvendar esses mistérios.
The Essentials of std::enable_if
std::enable_if é um modelo especializado definido da seguinte forma:
template struct enable_if {};
template struct enable_if { typedef T type; };
Crucialmente, o alias de tipo typedef T type só é definido quando Cond é verdadeiro.
Revelando o uso
Considere a seguinte declaração:
template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
Aqui, o tipo de retorno de foo é definido por std::enable_if<:numeric_limits>::is_integer, void>::type. Como std::numeric_limits
Esclarecendo o segundo argumento
Na notação:
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
O = 0 é utilizado para padronizar o segundo parâmetro do modelo. Isso permite que ambas as opções sejam invocadas usando foo
Detalhes dignos de nota
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