Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

std::swap

1 réponse
Avatar
Jean-Marc Bourguet
Question, comment écrire un template robuste utilisant swap?
L'utiliser non qualifié ne fonctionne pas pour les classes qui n'ont
pas une définition adéquate dans leur namespace (parce que celle de
std convient a été spécialisé avec la permission de 17.4.3.1) et
l'utiliser qualifié ne fonctionne pas pour les classes templates de
l'utilisateur (qui ne peuvent pas mettre la surcharge nécessaire dans
std).

Il me semble qu'un using std::swap permet de résoudre le problème mais
j'aimerais bien être sûr.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

1 réponse

Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| Question, comment écrire un template robuste utilisant swap?
| L'utiliser non qualifié ne fonctionne pas pour les classes qui n'ont
| pas une définition adéquate dans leur namespace (parce que celle de
| std convient a été spécialisé avec la permission de 17.4.3.1) et
| l'utiliser qualifié ne fonctionne pas pour les classes templates de
| l'utilisateur (qui ne peuvent pas mettre la surcharge nécessaire dans
| std).
|
| Il me semble qu'un using std::swap permet de résoudre le problème mais
| j'aimerais bien être sûr.

Oui, c'est ce que j'ai toujours conseillé :

template<class T>
void foo(T& x, T& y)
{
using std::swap;
// ...
swap(x, y);
// ...
}

La déclaration d'utilisation apporte std::swap dans la portée et est
ajoutée à la liste des déclarations de swap considérées pendant
l'instantiation et la résolution de surcharge.

-- Gaby