"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 > Como funciona `std::enable_if`: desvendando os mistérios de sua implementação e uso?

Como funciona `std::enable_if`: desvendando os mistérios de sua implementação e uso?

Publicado em 2024-11-12
Navegar:892

How Does `std::enable_if` Work: Unraveling the Mysteries of Its Implementation and Usage?

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::is_integer é uma condição booleana, esse tipo de retorno só será definido se a condição for verdadeira.

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(1), em vez de exigir dois parâmetros de modelo se o parâmetro std::enable_if não fosse padronizado.

Detalhes dignos de nota

  • Digitar explicitamente o nome do tipo std::enable_if<:condition t>::type aumenta a clareza.
  • Em C 14, enable_if_t é um tipo estabelecido que deve ser empregado para o tipo de retorno, simplificando-o para std::enable_if_t.
  • Para versões do Visual Studio anteriores a 2013, apenas o tipo de retorno pode empregar enable_if.
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