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.
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 :
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 ?