Je voudrais énumérer les conséquences de chaque alternative, puis décider quelle option est la meilleure pour le cas particulier à portée de main.
Si l'option de modèle peut (prématurément?) Gonfler le code objet, l'alternative de polymorphisme peut rendre le code source inutilement complexe.
Dans le cas des modèles, le compilateur créera une autre classe Button
pour chaque objet fonction avec lequel vous l'instanciez. Cela signifie que le code d'objet du produit sera plus grand que si vous avez une seule classe Button
qui accepte divers objets d'action via une sous-classe. Dans le cas du polymorphisme, le compilateur générera une seule classe Button
mais vous aurez maintenant une autre classe de base à maintenir, et vous serez obligé de la sous-classer pour toute nouvelle action que vous ajouterez à votre collection. En particulier, vous ne pourrez pas utiliser les actions qui ont été écrites avant de créer la classe d'action de base, sauf si vous pouvez les modifier afin qu'elles dérivent de cette classe d'action.
L'alternative de modèle vous permet d'utiliser tout ce qui est conforme à l'interface du modèle. Donc, si vous utilisez le paramètre template en tant que fonction, vous pouvez accepter tout ce qui peut être appelé comme une fonction. Cela implique que vous n'avez même pas besoin de considérer l'alternative des pointeurs de fonction, puisque les modèles vous permettent d'accepter des pointeurs de fonction - et bien plus encore.
L'option de polymorphisme implique que le compilateur en sait plus sur ce que vous essayez de faire. En d'autres termes, les modèles sont livrés avec des erreurs de modèles.
Vous pouvez atténuer certains des problèmes de modèle si vous pouvez trouver un moyen de modéliser uniquement les fonctions membres Button
, plutôt que la classe Button
entière. Prenez comme paramètre de fonction une instance du modèle, vous n'avez donc pas besoin d'instancier explicitement la fonction du modèle. Ensuite, vous gagnez à la fois sur certains des avantages du modèle ainsi que certains des avantages du polymorphisme.
deux sont des solutions acceptables. De quel genre de critères vous inquiétez-vous? La deuxième forme pourrait être un peu plus lisible mais certainement plus verbeuse. Vous pouvez réaliser la première solution sans modèles je crois. – Pace