es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que la instancia de un método de plantilla de clase sea igual a otro en C++?

Digamos que hay la siguiente plantilla de clase:

template<char type="">
class A
{
public:
  // ...
  void worker_method();
};

// Instanciación para el tipo 'c'.
template<>
void A<'c'>::worker_method()
{
  // Hacer algo específico para el tipo 'c'.
}

Es bastante simple, pero digamos que me gustaría que la instanciación de worker_method para A<'C'> sea igual a A<'c'>.

EDIT:

Necesito que la misma instanciación de worker_method sea independiente del caso del type. Por ejemplo, para ‘c’ y ‘C’ — las suyas propias, para ‘f’ y ‘F’ — las suyas propias, pero, digamos, para ‘e’ y ‘E’ — diferentes entre sí.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que la instanciación del método worker_method para A<'C'> sea igual a A<'c'>, podemos usar un static_assert para comprobar si el tipo es ‘c’ o ‘C’. Luego, podemos usar declaraciones condicionales para ejecutar el código correspondiente. Aquí tienes un ejemplo:

    template<char type="">
    class A
    {
    public:
      // ...
      void worker_method()
      {
        if constexpr (type == 'c' || type == 'C')
        {
          // Hacer algo específico para los tipos 'c' y 'C'.
        }
        else if constexpr (type == 'f' || type == 'F')
        {
          // Hacer algo específico para los tipos 'f' y 'F'.
        }
        else if constexpr (type == 'e' || type == 'E')
        {
          // Hacer algo específico para los tipos 'e' y 'E'.
        }
        else
        {
          static_assert(false, "Tipo no compatible");
        }
      }
    };
    

    De esta manera, el método worker_method tendrá diferentes instanciaciones para cada tipo, pero las de ‘c’ y ‘C’ tendrán el mismo código.

Comments are closed.