Partilhar via


Auxiliares de classe de coleção

As classes CMapde coleção , CListe CArray usam funções auxiliares globais modeladas para fins como comparação, cópia e serialização de elementos. Como parte de sua implementação de classes baseadas em CMap, CListe CArray, você deve substituir essas funções conforme necessário por versões adaptadas ao tipo de dados armazenados em seu mapa, lista ou matriz. Para obter informações sobre como substituir funções auxiliares, como SerializeElements, consulte o artigo Coleções: Como criar uma coleção Type-Safe. Observe que ConstructElements e DestructElements foram preteridos.

A Microsoft Foundation Class Library fornece as seguintes funções globais em afxtempl.h para ajudá-lo a personalizar suas classes de coleção:

Auxiliares de classe de coleção

Nome Descrição
CompareElements Indica se os elementos são os mesmos.
Elementos de cópia Copia elementos de uma matriz para outra.
DumpElements Fornece saída de diagnóstico orientada a fluxo.
HashKey Calcula uma chave de hash.
SerializeElements Armazena ou recupera elementos de ou para um arquivo.

CompareElements

Chamado diretamente por CList::Find e indiretamente por CMap::Lookup e CMap::operator[].

template<class TYPE, class ARG_TYPE>
BOOL AFXAPI
CompareElements(
    const TYPE* pElement1,
    const ARG_TYPE* pElement2);

Parâmetros

TIPO
O tipo do primeiro elemento a ser comparado.

pElement1
Ponteiro para o primeiro elemento a ser comparado.

ARG_TYPE
O tipo do segundo elemento a ser comparado.

pElement2
Ponteiro para o segundo elemento a ser comparado.

Valor de retorno

Diferente de zero se o objeto apontado por pElement1 for igual ao objeto apontado por pElement2; caso contrário, 0.

Observações

As CMap chamadas usam os CMap parâmetros de modelo KEY e ARG_KEY.

A implementação padrão retorna o resultado da comparação de *pElement1 e *pElement2. Substitua essa função para que ela compare os elementos de uma maneira apropriada para seu aplicativo.

A linguagem C++ define o operador de comparação (==) para tipos simples (char, int, float, e assim por diante), mas não define um operador de comparação para classes e estruturas. Se você quiser usar CompareElements ou instanciar uma das classes de coleção que o usa, você deve definir o operador de comparação ou sobrecarregar CompareElements com uma versão que retorna valores apropriados.

Requerimentos

Cabeçalho: afxtempl.h

Elementos de cópia

Esta função é chamada diretamente por CArray::Append e CArray::Copy.

template<class TYPE>
void AFXAPI CopyElements(
    TYPE* pDest,
    const TYPE* pSrc,
    INT_PTR nCount);

Parâmetros

TIPO
Parâmetro de modelo que especifica o tipo de elementos a serem copiados.

pDest
Ponteiro para o destino onde os elementos serão copiados.

pSrc
Ponteiro para a origem dos elementos a serem copiados.

nContagem
Número de elementos a copiar.

Observações

A implementação padrão usa o operador de atribuição simples ( = ) para executar a operação de cópia. Se o tipo que está sendo copiado não tiver um operador sobrecarregado=, a implementação padrão executará uma cópia bitwise.

Para obter informações sobre como implementar esta e outras funções auxiliares, consulte o artigo Collections: How to Make a Type-Safe Collection.

Requerimentos

Cabeçalho afxtempl.h

DumpElements

Fornece saída de diagnóstico orientada a fluxo em forma de texto para os elementos de sua coleção quando substituídos.

template<class TYPE>
void  AFXAPI DumpElements(
    CDumpContext& dc,
    const TYPE* pElements,
    INT_PTR nCount);

Parâmetros

DC
Contexto de despejo para elementos de dumping.

TIPO
Parâmetro de modelo que especifica o tipo dos elementos.

Elementos pElements
Ponteiro para os elementos a serem despejados.

nContagem
Número de elementos a serem despejados.

Observações

As CArray::Dumpfunções , CList::Dump, e chamam CMap::Dump isso se a profundidade do despejo for maior que 0.

A implementação padrão não faz nada. Se os elementos da sua coleção forem derivados do CObject, sua substituição normalmente iterará pelos elementos da coleção, chamando Dump cada elemento por vez.

Requerimentos

Cabeçalho afxtempl.h

HashKey

Calcula um valor de hash para a chave fornecida.

template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY  key);

Parâmetros

ARG_KEY
Parâmetro de modelo que especifica o tipo de dados usado para acessar chaves de mapa.

chave
A chave cujo valor de hash deve ser calculado.

Valor de retorno

O valor de hash da chave.

Observações

Esta função é chamada diretamente por CMap::RemoveKey e indiretamente por CMap::Lookup e CMap::operator[].

A implementação padrão cria um valor de hash deslocando a chave para a direita em quatro posições. Substitua essa função para que ela retorne valores de hash apropriados para seu aplicativo.

Exemplo

template <> UINT AFXAPI HashKey(unsigned __int64 key)
{
   // Generate the hash value by XORing the lower 32 bits of the number
   // with the upper 32 bits
   return(UINT(key) ^ UINT(key >> 32));
}

Requerimentos

Cabeçalho afxtempl.h

SerializeElements

CArray, CList e CMap chamam essa função para serializar elementos.

template<class TYPE>
void AFXAPI SerializeElements(CArchive& ar, TYPE* pElements, INT_PTR nCount);

Parâmetros

TIPO
Parâmetro de modelo que especifica o tipo dos elementos.

RA
Um objeto de arquivo para arquivar de ou para fora.

Elementos pElements
Ponteiro para os elementos que estão sendo arquivados.

nContagem
Número de elementos arquivados

Observações

A implementação padrão faz uma leitura ou gravação bit a bit.

Para obter informações sobre como implementar esta e outras funções auxiliares, consulte o artigo Collections: How to Make a Type-Safe Collection.

Exemplo

Veja o exemplo no artigo Coleções: Como fazer uma coleção Type-Safe.

Requerimentos

Cabeçalho afxtempl.h

Ver também

Macros e Globais
Classe CMap
Classe CList
Classe CArray