Bonjour,
Je suis à la recherche de conseils et d'avis.
Je m'apprête à mettre en place un système de communication entre les instances de mes classes avec des messages.
L'idée est d'avoir un "bureau de poste", auquel s'enregistrent les classes souhaitant recevoir des messages (messageable), les messages envoyés héritant de la classe "message".
Actuellement, lors du transfert des messages j'ai une méthode messageable::process_message( message& m ). C'est alors au destinataire de retrouver le type d'origine du message. Là c'est difficile parce que la classe "message" n'as pas de méthode virtuelle, donc pas de dynamic_cast<>(). Je me suis dit que je pourrais mettre un identifiant à toutes les classes héritant de "message". Le problème c'est que ça devient vite ingérable (genre "quel est le prochain identifiant libre ?"). La solution pourrait être de faire un fichier avec tous les identifiants. Ca me gène parce que ça force un lien entre tous les messages. Peut-être qu'il est possible de générer des identifiants à la compilation ? par métaprogrammation ? je n'en ai aucune idée.
Du coup je pense à une autre méthode. j'enlève la méthode messageable::process_message() et j'ajoute une méthode message::apply_to( messageable& m ). Le type réel du message est alors bien connu, mais c'est au message de retrouver le type réel du messageable. Ceci dit, vu que ce sont les objets qui définissent les messages qui s'appliquent à eux, il ne devrait pas y avoir de doute quant au type du paramètre.
Qu'est-ce que vous pensez de ces deux méthodes ? En voyez vous d'autres ?
merci.
Partager