Selección de una función miembro utilizando diferentes condiciones enable_if
La metafunción enable_if se utiliza para especificar parámetros de función de plantilla y seleccionar funciones miembro apropiadas en función de ellos . Considere el siguiente código:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout Sin embargo, este código puede causar errores del compilador que indican que "no hay ningún tipo llamado 'tipo' en 'struct std::enable_if'".
Comprensión de enable_if
enable_if garantiza que solo se consideren las sobrecargas de funciones viables durante la resolución de sobrecarga. Si falla la sustitución de un argumento de plantilla, esa sobrecarga se elimina del conjunto de candidatos.
En el ejemplo anterior, el argumento de plantilla T ya se conoce al crear instancias de las funciones miembro. Para implementar el comportamiento deseado, podemos crear un argumento de plantilla ficticio predeterminado en T y realizar SFINAE usándolo:
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
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