template< class T1, class T2 >
class Pair {
T1 first;
T2 second;
};
On me demande d'écrire une méthode swap() pour que le premier élément devienne le second et le second le premier. J'ai:C++: échange d'éléments de classe de modèles de différents types?
Pair<T2,T1> swap() {
return Pair<T2,T1>(second, first);
}
Mais retourne un nouvel objet plutôt que la permutation, où je pense qu'il a besoin d'être une méthode vide qui change ses membres de données. Est-ce possible parce que T1 et T2 sont des types de classes potentiellement différents? En d'autres termes, je ne peux pas simplement définir temp = first, first = second, second = temp car il essayerait de les convertir en différents types. Je ne suis pas sûr pourquoi vous voudriez potentiellement avoir un objet de modèle qui change l'ordre de ses types car il semblerait que cela causerait la confusion mais cela semble être ce que je suis invité à faire.
Éditer: Merci à tous pour votre réponse! À peu près comme je le pensais, l'échange sur place n'a évidemment aucun sens, la demande pour la fonction swap() était assez ambiguë.
Je choisirais un nom différent de 'swap'. Les personnes habituées à utiliser la bibliothèque standard penseront que «swap» est destiné à échanger le contenu de deux objets du même type. Que diriez-vous de 'flip'? –
@Emile: Je ne vois pas cela comme un gros problème. C'est un 'swap()' qui prend __ un argument__ composé de __deux parties .__ Qu'est-ce que ça pourrait faire, mais les échanger? Ce qui est inhabituel, cependant, c'est que ça ne peut pas être (enfin, je ne vois pas comment, de toute façon) un échange en place. Cela diffère en effet du 'swap()' que nous avons appris à connaître. – sbi