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)