Compartir a través de


Clase CTypedPtrList

Proporciona un "contenedor" de tipo seguro para objetos de clase CPtrList.

Sintaxis

template<class BASE_CLASS, class TYPE>
class CTypedPtrList : public BASE_CLASS

Parámetros

BASE_CLASS
Clase base de la clase de lista de puntero con tipo; debe ser una clase de lista de puntero (CObList o CPtrList).

TYPE
Tipo de los elementos almacenados en la lista de clases base.

Miembros

Métodos públicos

Nombre Descripción
CTypedPtrList::AddHead Agrega un elemento (o todos los elementos de otra lista) al principio de la lista (crea un principio nuevo).
CTypedPtrList::AddTail Agrega un elemento (o todos los elementos de otra lista) al final de la lista (crea un final nuevo).
CTypedPtrList::GetAt Obtiene el elemento en una posición determinada.
CTypedPtrList::GetHead Devuelve el elemento del encabezado de la lista (no puede estar vacío).
CTypedPtrList::GetNext Obtiene el siguiente elemento para iterar.
CTypedPtrList::GetPrev Obtiene el elemento anterior para su iteración.
CTypedPtrList::GetTail Devuelve el elemento del final de la lista (no puede estar vacío).
CTypedPtrList::RemoveHead Quita el elemento del principio de la lista.
CTypedPtrList::RemoveTail Quita el elemento del final de la lista.
CTypedPtrList::SetAt Establece el elemento en una posición determinada.

Comentarios

Si se usa CTypedPtrList en lugar de CObList o CPtrList, la capacidad de comprobación de tipos de C++ ayuda a eliminar los errores causados por tipos de punteros no coincidentes.

Además, el contenedor CTypedPtrList realiza gran parte de la conversión necesaria si se usara CObList o CPtrList.

Dado que todas las funciones CTypedPtrList están insertadas, el uso de esta plantilla no afecta significativamente al tamaño o la velocidad del código.

Las listas derivadas de CObList se pueden serializar, pero las derivadas de CPtrList no.

Cuando se elimina un objeto CTypedPtrList, o cuando se quitan sus elementos, solo se quitan los punteros, no las entidades a las que hacen referencia.

Para obtener más información sobre el uso de CTypedPtrList, vea los artículos Colecciones y Clases basadas en plantillas.

Ejemplo

En este ejemplo se crea una instancia de CTypedPtrList, se agrega un objeto, se serializa la lista en el disco y luego se elimina el objeto:

typedef CTypedPtrList<CObList, CMyObject*>  CMyList;
CMyList ml;
CMyObject* pMyObject = new CMyObject();
ml.AddTail(pMyObject);

CFileException e;
CFile myFile;
myFile.Open(_T("CTypedPtrList_File.txt"),
   CFile::modeCreate | CFile::modeWrite, &e);
CArchive ar(&myFile, CArchive::store);
ml.Serialize(ar);

ar.Close();
myFile.Close();

while (!ml.IsEmpty())
{
   delete ml.GetHead();
   ml.RemoveHead();
}

 

class CMyObject : public CObject
{
public:
   int i;
   void Serialize(CArchive& ar);
   CMyObject() { i = 9876; }
protected:
   DECLARE_SERIAL(CMyObject)
};

IMPLEMENT_SERIAL(CMyObject, CObject, 0)

void CMyObject::Serialize(CArchive& ar)
{
   CObject::Serialize(ar);
   if (ar.IsStoring())
      ar << i;
   else
      ar >> i;
}

Jerarquía de herencia

BASE_CLASS

_CTypedPtrList

CTypedPtrList

Requisitos

Encabezado: afxtempl.h

CTypedPtrList::AddHead

Esta función miembro llama a BASE_CLASS::AddHead.

POSITION AddHead(TYPE newElement);
void AddHead(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

Parámetros

TYPE
Tipo de los elementos almacenados en la lista de clases base.

newElement
Puntero de objeto que se va a agregar a esta lista. Se permite un valor NULL.

BASE_CLASS
Clase base de la clase de lista de puntero con tipo; debe ser una clase de lista de puntero (CObList o CPtrList).

pNewList
Puntero a otro objeto CTypedPtrList. Los elementos de pNewList se agregan a esta lista.

Valor devuelto

La primera versión devuelve el valor POSITION del elemento recién insertado.

Comentarios

La primera versión agrega un nuevo elemento antes del principio de la lista. La segunda versión agrega otra lista de elementos antes del principio.

CTypedPtrList::AddTail

Esta función miembro llama a BASE_CLASS::AddTail.

POSITION AddTail(TYPE newElement);
void AddTail(CTypedPtrList<BASE_CLASS, TYPE>* pNewList);

Parámetros

TYPE
Tipo de los elementos almacenados en la lista de clases base.

newElement
Puntero de objeto que se va a agregar a esta lista. Se permite un valor NULL.

BASE_CLASS
Clase base de la clase de lista de puntero con tipo; debe ser una clase de lista de puntero (CObList o CPtrList).

pNewList
Puntero a otro objeto CTypedPtrList. Los elementos de pNewList se agregan a esta lista.

Valor devuelto

La primera versión devuelve el valor POSITION del elemento recién insertado.

Comentarios

La primera versión agrega un nuevo elemento después del final de la lista. La segunda versión agrega otra lista de elementos después del final de la lista.

CTypedPtrList::GetAt

Una variable de tipo POSITION es una clave de la lista.

TYPE& GetAt(POSITION position);
TYPE GetAt(POSITION position) const;

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos almacenados en la lista.

position
Un valor POSITION devuelto por una llamada de función miembro GetHeadPosition o Find.

Valor devuelto

Si se accede a la lista por medio de un puntero a const CTypedPtrList, GetAt devuelve un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función solo en el lado derecho de una instrucción de asignación, lo que protege la lista frente a modificaciones.

Si se accede a la lista directamente o por medio de un puntero a CTypedPtrList, GetAt devuelve una referencia a un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función en cualquier lado de una instrucción de asignación y, por tanto, permite modificar las entradas de la lista.

Comentarios

No es lo mismo que un índice, y no se puede trabajar con un valor POSITION uno mismo. GetAt recupera el puntero CObject asociado a una posición determinada.

Debe asegurarse de que el valor POSITION represente una posición válida de la lista. Si no es válida, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class).

Esta función insertada llama a BASE_CLASS::GetAt.

CTypedPtrList::GetHead

Obtiene el puntero que representa el elemento inicial de esta lista.

TYPE& GetHead();
TYPE GetHead() const;

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos almacenados en la lista.

Valor devuelto

Si se accede a la lista por medio de un puntero a const CTypedPtrList, GetHead devuelve un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función solo en el lado derecho de una instrucción de asignación, lo que protege la lista frente a modificaciones.

Si se accede a la lista directamente o por medio de un puntero a CTypedPtrList, GetHead devuelve una referencia a un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función en cualquier lado de una instrucción de asignación y, por tanto, permite modificar las entradas de la lista.

Comentarios

Debe asegurarse de que la lista no esté vacía antes de llamar a GetHead. Si lo está, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class). Use IsEmpty para comprobar que la lista contiene elementos.

CTypedPtrList::GetNext

Obtiene el elemento de lista identificado por rPosition y luego establece rPosition en el valor POSITION de la siguiente entrada de la lista.

TYPE& GetNext(POSITION& rPosition);
TYPE GetNext(POSITION& rPosition) const;

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos incluidos en esta lista.

rPosition
Referencia a un valor POSITION devuelto por un elemento anterior GetNext, GetHeadPosition u otra llamada de función miembro.

Valor devuelto

Si se accede a la lista por medio de un puntero a const CTypedPtrList, GetNext devuelve un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función solo en el lado derecho de una instrucción de asignación, lo que protege la lista frente a modificaciones.

Si se accede a la lista directamente o por medio de un puntero a CTypedPtrList, GetNext devuelve una referencia a un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función en cualquier lado de una instrucción de asignación y, por tanto, permite modificar las entradas de la lista.

Comentarios

Puede usar GetNext en un bucle de iteración hacia delante si establece la posición inicial con una llamada a GetHeadPosition o CPtrList::Find.

Debe asegurarse de que el valor POSITION represente una posición válida de la lista. Si no es válida, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class).

Si el elemento recuperado es el último de la lista, el valor nuevo de rPosition se establece en NULL.

Es posible quitar un elemento durante una iteración. Vea el ejemplo de CObList::RemoveAt.

CTypedPtrList::GetPrev

Obtiene el elemento de lista identificado por rPosition y luego establece rPosition en el valor POSITION de la entrada anterior de la lista.

TYPE& GetPrev(POSITION& rPosition);
TYPE GetPrev(POSITION& rPosition) const;

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos incluidos en esta lista.

rPosition
Referencia a un valor POSITION devuelto por un elemento anterior GetPrev u otra llamada de función miembro.

Valor devuelto

Si se accede a la lista por medio de un puntero a const CTypedPtrList, GetPrev devuelve un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función solo en el lado derecho de una instrucción de asignación, lo que protege la lista frente a modificaciones.

Si se accede a la lista directamente o por medio de un puntero a CTypedPtrList, GetPrev devuelve una referencia a un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función en cualquier lado de una instrucción de asignación y, por tanto, permite modificar las entradas de la lista.

Comentarios

Puede usar GetPrev en un bucle de iteración inversa si establece la posición inicial con una llamada a GetTailPosition o Find.

Debe asegurarse de que el valor POSITION represente una posición válida de la lista. Si no es válida, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class).

Si el elemento recuperado es el primero de la lista, el valor nuevo de rPosition se establece en NULL.

CTypedPtrList::GetTail

Obtiene el puntero que representa el elemento inicial de esta lista.

TYPE& GetTail();
TYPE GetTail() const;

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos almacenados en la lista.

Valor devuelto

Si se accede a la lista por medio de un puntero a const CTypedPtrList, GetTail devuelve un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función solo en el lado derecho de una instrucción de asignación, lo que protege la lista frente a modificaciones.

Si se accede a la lista directamente o por medio de un puntero a CTypedPtrList, GetTail devuelve una referencia a un puntero del tipo especificado por el parámetro de plantilla TYPE. Esto permite usar la función en cualquier lado de una instrucción de asignación y, por tanto, permite modificar las entradas de la lista.

Comentarios

Debe asegurarse de que la lista no esté vacía antes de llamar a GetTail. Si lo está, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class). Use IsEmpty para comprobar que la lista contiene elementos.

CTypedPtrList::RemoveHead

Quita el elemento del principio de la lista y lo devuelve.

TYPE RemoveHead();

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos almacenados en la lista.

Valor devuelto

Puntero que anteriormente se encontraba en el principio de la lista. Este puntero es del tipo especificado por el parámetro de plantilla TYPE.

Comentarios

Debe asegurarse de que la lista no esté vacía antes de llamar a RemoveHead. Si lo está, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class). Use IsEmpty para comprobar que la lista contiene elementos.

CTypedPtrList::RemoveTail

Quita el elemento del final de la lista y lo devuelve.

TYPE RemoveTail();

Parámetros

TYPE
Parámetro de plantilla que especifica el tipo de elementos almacenados en la lista.

Valor devuelto

Puntero que anteriormente se encontraba en el final de la lista. Este puntero es del tipo especificado por el parámetro de plantilla TYPE.

Comentarios

Debe asegurarse de que la lista no esté vacía antes de llamar a RemoveTail. Si lo está, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class). Use IsEmpty para comprobar que la lista contiene elementos.

CTypedPtrList::SetAt

Esta función miembro llama a BASE_CLASS::SetAt.

void SetAt(POSITION pos, TYPE newElement);

Parámetros

pos
Valor POSITION del elemento que se va a establecer.

TYPE
Tipo de los elementos almacenados en la lista de clases base.

newElement
Puntero de objeto que se va a escribir en la lista.

Comentarios

Una variable de tipo POSITION es una clave de la lista. No es lo mismo que un índice, y no se puede trabajar con un valor POSITION uno mismo. SetAt escribe el puntero de objeto en la posición especificada de la lista.

Debe asegurarse de que el valor POSITION represente una posición válida de la lista. Si no es válida, se impone la versión de depuración de la biblioteca MFC (Microsoft Foundation Class).

Para obtener comentarios más detallados, vea CObList::SetAt.

Consulte también

Ejemplo COLLECT de MFC
Gráfico de jerarquías
CPtrList (clase)
CObList (clase)