"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo funciona `std::enable_if`: desentrañando los misterios de su implementación y uso?

¿Cómo funciona `std::enable_if`: desentrañando los misterios de su implementación y uso?

Publicado el 2024-11-12
Navegar:798

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

Comprender std::enable_if: descifrar su propósito e implementación

Si bien la naturaleza de std::enable_if se comprende en ciertos contextos, su Las complejidades, particularmente el segundo argumento y la asignación a std::enable_if dentro de la declaración de plantilla, siguen siendo enigmáticas. Profundizar en su funcionamiento desentrañará estos misterios.

Lo esencial de std::enable_if

std::enable_if es una plantilla especializada definida de la siguiente manera:

template struct enable_if {};
template struct enable_if { typedef T type; };

Crucialmente, el tipo alias typedef T solo se define cuando Cond es verdadero.

Revelando el uso

Considere la siguiente declaración:

template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }

Aquí, el tipo de retorno de foo está definido por std::enable_if<:numeric_limits>::is_integer, void>::type. Dado que std::numeric_limits::is_integer es una condición booleana, este tipo de devolución solo se definirá si la condición es verdadera.

Aclarando el segundo argumento

En la notación:

template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }

El = 0 se utiliza para establecer de forma predeterminada el segundo parámetro de plantilla. Esto permite invocar ambas opciones usando foo(1), en lugar de requerir dos parámetros de plantilla si el parámetro std::enable_if no estuviera predeterminado.

Detalles notables

  • Escribir explícitamente el nombre de tipo std::enable_if<:condition t>::type mejora la claridad.
  • En C 14, enable_if_t es un tipo establecido que debe emplearse para tipo de retorno, simplificándolo a std::enable_if_t.
  • Para las versiones de Visual Studio anteriores a 2013, solo el tipo de retorno puede emplear enable_if.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3