"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 implementar sobrecargas de funciones miembro condicionales usando enable_if en C++?

¿Cómo implementar sobrecargas de funciones miembro condicionales usando enable_if en C++?

Publicado el 2024-11-08
Navegar:756

How to Implement Conditional Member Function Overloads Using enable_if in C  ?

Selección de una función miembro con diferentes condiciones enable_if

En C, enable_if es una herramienta que se utiliza para habilitar o deshabilitar condicionalmente cierto código en función de si un argumento de plantilla cumple con criterios específicos. Esto puede resultar útil cuando desea personalizar el comportamiento de una clase o función según sus parámetros de plantilla.

En el ejemplo dado, el objetivo es crear una función miembro MyFunction que se comporte de manera diferente según si la plantilla El parámetro T es un número entero o no. La implementación prevista es utilizar dos sobrecargas de MyFunction, una para T = int y otra para T != int.

Un método para lograr esto es a través de enable_if, como se muestra en el siguiente código:

template
struct Point {
  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 generará errores de compilación debido al uso incorrecto de enable_if. En C, la sustitución de argumentos de plantilla tiene lugar durante la resolución de sobrecarga. En este caso, no se produce ninguna sustitución porque el tipo de T se conoce en el momento de la creación de instancias de la función miembro.

Para solucionar este problema, se puede introducir un parámetro de plantilla ficticio y establecerlo de forma predeterminada en T, lo que permite SFINAE (El error de sustitución no es un error) para que funcione correctamente:

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 

Este enfoque garantiza que se seleccione la versión correcta de MyFunction según el valor de T.

Ú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