class Message {};
class BuildSandCastle : public Message {};
class DigHole : public Message {};
Étant donné un objet Message*
arbitraire, comment puis-je appeler une fonction du même nom doMessage()
sans avoir recours à changer la logique ou de faire une classe MessageHandler qui a un « faire 'fonction pour chaque nom de message?Comment appeler une fonction particulière en fonction d'un type d'objet particulier
EDIT: par exemple:
class Sandbox
{
public:
void play(Message* m)
{
// call doBuildSandCastle
// or doDigHole based on m's type
}
void doBuildSandCastle();
void doDigHole();
};
Désolé, je n'étais pas clair avant.
EDIT:
quelqu'un peut-il supprimer simplement cette épave du train d'une question? Je ne veux vraiment pas toutes ces leçons de lycée dans le polymorphisme.
Maintenant que votre question est plus claire ... Vous pouvez soit obtenir votre objet de message pour appeler la bonne fonction: 'void play (Message * m) {m-> play (this); } ' ou vous pouvez avoir une carte de pointeurs de fonction dans' Sandbox' et exécuter la fonction appropriée basée sur le nom du message (ou ID_type), par ex. 'handler_map [m.name()]();' –