Nous concevons un nouveau système dans lequel nous avons créé des interfaces pour la plupart de nos classes afin de pouvoir créer des mocks (google mocks) pour les tests unitaires. En conséquence, toutes les fonctions sont virtuelles mais le problème est que je cours souvent dans le problème de fonction virtuelle de modèle dû à ceci. J'ai vu quelques exemples sur la façon de faire multi dispatch, mais ils semblent tous utiliser une certaine variation de modèles, cela ne semble pas simple. Cela signifie-t-il que toute ma base de code se retrouvera désormais avec des modèles rendant la lecture/l'utilisation et le débogage difficiles?Problème de fonctionnement du modèle virtuel C++ en raison de la programmation basée sur l'interface
Ou ne suis-je pas en train de concevoir de bonnes interfaces. Voici un exemple simple où j'écris une interface pour une file d'attente de messages.
Class IMessageQueue {
Public:
Virtual int send(const T & value); // I can't do this but this is exactly what I want to do, as send should be able to send any type
};
Class MessageQueue : public IMessageQueue {
Public:
Virtual int send(const T & value) { ... }
};
Class MockMQ : public IMessageQueue {
Public:
Virtual int send(const T & value) {
// mock implementation
}
};
Comment contourner ce problème? Ceci est juste un exemple mais je rencontre beaucoup de ces types de problèmes en raison de la programmation basée sur l'interface.
Vous pouvez probablement vous déplacer les en les rendant non virtuelles et ayant une fonction d'assistance qui détermine le type par dynamic_cast et appelle ensuite la fonction membre modélisée de ce type spécifique. Je ne sais pas à quel point cela finirait dans votre cas particulier, et je n'ai jamais essayé cela. – Sopel