Ayuda con Plantillas de Clases que tiene operadores sobrecargados

CoYoTe
10 de Enero del 2006
Hola.
Agradeceria muchisimo si alguien pudiera darme algo de luz en el siguiente problema.

Tengo la siguiente clase:

#ifndef _P5_CONTENEDOR_H_
#define _P5_CONTENEDOR_H_
template < class T >
class P5Contenedor {

public:
P5Contenedor (void);
P5Contenedor(const T &unT, P5Contenedor<T> *prev, P5Contenedor<T> *sig);
T& getValor();
void setValor(const T& valor);
P5Contenedor<T>* getPrevio();
void setPrevio(P5Contenedor<T>* previo);
P5Contenedor<T>* getSiguiente();
void setSiguiente(P5Contenedor<T>* siguiente);

private:
P5Contenedor<T>* previo;
P5Contenedor<T>* siguiente;
T valor;

};
#endif

y la siguiente clase:

#ifndef _P5_LISTACIRCULARORDENADA_H_
#define _P5_LISTACIRCULARORDENADA_H_
#include "P5Contenedor.h"
#include <iostream>

using namespace std;

template <class T>
class P5ListaCircularOrdenada
{
private:
P5Contenedor<T>* cabeza;
int numeroElementos;

public:
P5ListaCircularOrdenada (void);
~P5ListaCircularOrdenada (void);
void insertarElemento (const T & elemento);
void mostrarListaAscendente (ostream & s) const;
void mostrarListaDescendente (ostream & s) const;
int buscarElemento (const T & elemento) const;
void borrarElementoEn (int pos);
int getNumeroElementos (void) const;

friend ofstream & operator << (ofstream & out, P5ListaCircularOrdenada <T> & lista);
};

#endif

y te expongo la implementación de uno de los métodos de la segunda clase:

template <class T>
inline int P5ListaCircularOrdenada <T> :: getNumeroElementos (void) const
{
return numeroElementos;
}

Bueno pues mi problema es el siguiente, ¿Como se realiza la impelementación del código del operador << en el archivo P5ListaCircularEnlazada.cpp de la clase?
Muchas gracias de antemano.

kike
10 de Enero del 2006
Entiendo que quieres sobrecargar el operador << para guardar toda la lista de una vez.
Como los punteros no necesitas guardarlos ya que la proxima vez que se carge el archivo las direcciones seran diferentes, solo debes guardar los datos de manera ordenada para poder reconstruirlos en la sobrecarga del operador >>, por ultimo tener en cuenta que debes guardar en el archivo el tipo de dato ya que es una template y lo necesitaras para la reconstruccion.
Piensa en sobrecargar tambien los operadores para la clase contenedor eso te facilita el trabajo.
Espero que te sirva...