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>.