J'ai défini un pur « Action » classe abstraite comme ceci:classes abstraites d'émission en C++ Undo/Redo mise en œuvre
class Action {
public:
virtual void execute() = 0;
virtual void revert() = 0;
virtual ~Action() = 0;
};
Et représentés chaque commande, l'utilisateur peut exécuter avec une classe.
Pour Undo/Redo réelle Je voudrais faire quelque chose comme ceci:
Annuler
Action a = historyStack.pop();
a.revert();
undoneStack.push(a);
Redo
Action a = undoneStack.pop();
a.execute();
historyStack.push(a);
Le compilateur ne peut évidemment accepter pas, parce que "Action" est une classe abstraite qui ne peut être istancée.
Alors, dois-je tout repenser ou existe-t-il une solution simple à ce problème?
N'oubliez pas de supprimer. Les pointeurs intelligents sont utiles, tout comme les conteneurs spécifiques aux pointeurs tels que Boost Pointer Containers. – GManNickG
Oui, merci, un conteneur de pointeur intelligent sera certainement nécessaire ici. –
Cependant, avec ces fonctions, vous voulez une pile, pas un vecteur. :) – GManNickG