¡Nuevo!  por fin disponible la versión 5 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


Funciones-miembro (métodos) genéricos en clases genéricas

Ejemplo

Definición de un método genérico en una clase genérica.  La definición se realiza off-line (en el exterior del cuerpo de la clase).


#include <iostream>
using namespace std;

template<class X> class A {  // clase genérica
  public:
  int x;
  X* xptr;
  template<class T> void fun(T t1, T t2); // método genérico
  A (X* b, int i = 0);       // constructor
    x = i;
    xptr = b;
  }
};

template<class X>        // definición off-line 
  template<class T> void A<X>::fun(T t1, T t2) {
      cout << "Valor-1: " << t1 
           << ", Valor-2: " << t2
           << ", Miembro-x: " << x
           << ", Objeto: " << *xptr << endl;
  }

template<class X>        // constructor off-line
  A<X>::A(X* b, int i) {
    x = i;
    xptr = b;
  }

int main(void) {         // ==============
  char c = 'c'; char* cptr = &c;
  int x = 13;   int* iptr = &x;
  A<int> a(iptr, 2);     // instanciar un objeto
  A<char> b(cptr, 3);    // ídem.
  a.fun(2, 3);           // invocar método de instancia
  b.fun('x', 'y');       // ídem.
  return 0;
}

Salida:

Valor-1: 2, Valor-2: 3, Miembro-x: 2, Objeto: 13
Valor-1: x, Valor-2: y, Miembro-x: 3, Objeto: c

Comentario:

El programa es exactamente igual que un ejemplo anterior ( Ejemplo-1). La única diferencia estriba en que aquí la definición del método genérico fun se ha realizado "off-line", fuera del cuerpo de la clase genérica A.

La única particularidad interesante es la necesidad de incluir el especificador template<class X> para que el compilador conozca el significado del especificador  A<X>.