OVH Cloud OVH Cloud

Templates MFC et Serialization

2 réponses
Avatar
Jmr
Bonjour, ma question concerne les templates utilisées par les classes MFC et
en particulier la classe CMap.

Je voudrais écrire une classe, CDataMap, dérivée de la classe CObject (pour
conserver les mécanismes de serialization) utilisant une variable membre de
type :
CMap<CString, LPCSTR, CData, CData &> m_Map;
Où CData est une classe particulière dérivée de CObject.

class CDataMap : public CObject
{
DECLARE_SERIAL(CDataMap)
public:
CMap<CString, LPCSTR, CData, CData &> m_Map;
public:
void Serialize(CArchive &ar);
//redéfinition "classique" de la fonction Serialize...
CDataMap();
virtual ~CDataMap();
.
};

Afin que CDataMap puisse utiliser les mécanismes de la serialization je
redéfinis la fonction serialize :

void CBob::Serialize(CArchive &ar)
{
// Cette fonction serialize la variable membre dictionnaire m_Map.

CString strKey;
CData Data;

CObject::Serialize(ar);

POSITION pos = m_Map.GetStartPosition();

while (pos != NULL)
{
m_Map.GetNextAssoc(pos, strKey, Data);
Data.Serialize(ar);
}
}

Jusqu'ici, il n'y a, je pense, rien de choquant sauf que, dans la
documentation de la classe CMap, il est préciser que celle-ci utilise des
« collection class helpers » que l'on doit redéfinir pour assurer certains
comportements. Il en serait ainsi pour la serialization où il faudrait
redéfinir la fonction SerializeElements. Ce qui conduirait à quelque chose
du genre :

template <> void AFXAPI SerializeElements <CData> ( CArchive& ar, CData*
pNewData, int nCount )

{
CString strKey;
CData Data;

POSITION pos = m_Map.GetStartPosition();

while (pos != NULL)
{
m_Map.GetNextAssoc(pos, strKey, Data);
Data.Serialize(ar);
}
}

Alors en fin de compte, comment cela fonctionne-t'il ? Dois-je redéfinir la
fonction Serialize normalement où faut-il redéfinir la fonction « helper »
SerializeElements, et dans ce cas où l'écrire et combien de fois ?

Merci.

2 réponses

Avatar
Jonathan Mcdougall
Bonjour, ma question concerne les templates utilisées par les classes MFC
et

en particulier la classe CMap.


http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/#generalites



Jonathan

Avatar
David Brabant
"Jmr" wrote

Bonjour, ma question concerne les templates utilisées
par les classes MFC et en particulier la classe CMap.


Pas le bon groupe.
Le groupe qui va bien: news://fr.comp.os.ms-windows.programmation

--
David