2009-06-01 6 views
1

Je suis en train d'utiliser le code StructSerlialiser donné sous What’s the best use you’ve had with pointer to members and member functions? Après avoir rempli le FieldBinderList, comment puis-je accéder le pointeur à un membre de la liste de classe de base? Je dois faire ceci si je veux placer ce champ avec une valeur lue un fichier XML.structures Populate C++ POD d'événements SAX

+0

J'ai créé un lien vers la question afin que d'autres puissent le lire. SO devrait vraiment permettre des liens vers lui-même pour les utilisateurs de faible rep ... – Zifre

Répondre

1

Lorsqu'un StructSeriliser est créé, il est passé à une instance de l'objet est correspond à et il crée sérialiseur pour chaque champ:

StructSerialiser (T* data) 
    : SerialiserData (data) 
{ 
    if (fieldBinderList_.empty()) 
     Serialiser<T>::initialise(); 

    typedef FieldBinderList::const_iterator Iter; 
    for (Iter iter = fieldBinderList_.begin() 
     ; iter != fieldBinderList_.end() 
     ; ++iter 
     ) 
    { 
     serialisers_.push_back 
      (SerialiserEntry 
       ((*iter)->tags_ 
       , (*iter)->createSerialiser (*data) 
       ) 
      ); 
    } 
} 

Ensuite, lorsque le sérialiseur est passé un élément de départ, il passe à l'autre sérialiseur de champ approprié.

Pour être honnête, l'extrait de code original n'était pas destiné à être utilisable dans son propre droit. Le code complet pour cette classe est de plus de 500 lignes, et il existe des sérialiseurs pour les primitives, les optionnels et les choix.