Bonjour à tous

J'ai posé un petit exercice sur le chat en pensant qu'il ne poserait pas de difficultés particulière. Et j'ai été surpris de voir une proposition de solution assez originale de germinolegrand (qu'il va garder pour lui, le temps que d'autres personnes proposent aussi des solutions). Voici l’annoncé, relativement simple, pour que d'autres puisse participer :

Vous avez un classe qui contient plusieurs conteneurs membres. Vous souhaitez écrire une fonction permettant de faire une transaction, c'est à dire insérer des éléments dans les conteneurs et que les insertions soient toutes réussies ou soient toutes annulées.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class SafeTransaction {
   vector<int> v1, v2;
public:
   void push_back(int x1, int x2) { 
      v1.push_back(x1);
      v2.push_back(x2);
   }
};
 
SafeTransaction t;
t.push_back(1, 2);
// v1 et v2 contiennent 1 élément chacun, soit v1 et v2 ne contiennent rien
Pouvez-vous donner un exemple de classe(s) permettant de réaliser ça ?
Pensez en particulier aux exceptions, à pouvoir utiliser différents types de conteneurs et de contenant et plus de deux conteneurs membres. Essayez de proposer du code C++11 et non C++11 si possible.

C'est les vacances, prenez votre temps, fin de l'exercice à la fin du mois d'août.