void Message::toXML( XMLWriter& writer ) masque les noms toXML dans tout les sub-object -- la supplantation de la fonction virtuelle est toutefois bien considérée. Ce qui fait que std::string BaseMessage::toXML() n'est pas considérée.
Je ne suis pas sur à 100% de l'explication. C'est une question que je me suis souvent posée, et j'y répond comme ça, j'espère que c'est correct.
Une bonne façon de procéder :
Code :
- class BaseMessage
- {
- public:
- std::string toXML();
- void toXML(XMLWriter& writer) { doToXML( writer ); }
- private:
- virtual void doToXML( XMLWriter& writer ) = 0;
- };
- class Message : public BaseMessage
- {
- private:
- virtual void doToXML(XMLWriter& writer);
- }
|