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
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
Detalles notables
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