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.

Clase con dos o más sobrecargas de plantilla

Supongamos que tenía una clase que quería declarar con dos “sobrecargas”, una que aceptaba 1 parámetro de plantilla y otra que aceptaba 2 como el pseudo código debajo:

template <typename i="">
class B {
public:
};

template <typename f,="" typename="" i="">
class B { 
};

De manera tal que B pueda ser instanciado con solo 1 o 2 parámetros:

B<int> hello;
B<int, int=""> hello2;

¿Cuál es la manera correcta de hacer esto?</int,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para declarar una clase con dos sobrecargas, una que acepta 1 parámetro de plantilla y otra que acepta 2, se puede utilizar la especialización de plantilla en C++. Aquí hay un ejemplo de código:

    template <typename i="">
    class B {
    public:
        // implementación para B con 1 parámetro de plantilla
    };
    
    template <typename f,="" typename="" i="">
    class B {
    public:
        // implementación para B con 2 parámetros de plantilla
    };
    
    // especialización de plantilla para B con 1 parámetro de plantilla
    template <typename i="">
    class B<i> {
    public:
        // implementación para B con 1 parámetro de plantilla
    };
    
    // especialización de plantilla para B con 2 parámetros de plantilla
    template <typename f,="" typename="" i="">
    class B<f, i=""> {
    public:
        // implementación para B con 2 parámetros de plantilla
    };
    

    En el código anterior, primero definimos la plantilla de clase genérica B con dos versiones: una que acepta 1 parámetro de plantilla y otra que acepta 2. Luego, especializamos la plantilla de clase B para ambos casos definiendo implementaciones separadas para cada uno.

    Para instanciar la clase B, se pueden utilizar uno o dos argumentos de plantilla:

    B<int> hello; // instanciar B con 1 parámetro de plantilla
    B<int, double=""> hello2; // instanciar B con 2 parámetros de plantilla
    </int,></f,>

Comments are closed.