Il caso di utilizzo più forte per ADL è per casi come questo.
namespace A
{
struct S {};
S operator+(const S&, const S&);
}
namespace B
{
A::S test()
{
A::S a, b;
return a + b;
}
}
È altresì utile per selezionare la funzione corretta swap
in codice generico quindi non dovrebbe solamente applicarsi a operator
funzioni. È già una parte abbastanza complessa dello standard, rendendo le regole che gli impedivano di lavorare in alcuni casi aggiungerebbe ulteriore complessità, quale sarebbe il guadagno?
Non riesco a pensare a un modo accurato di richiederlo esplicitamente che sarebbe significativamente meno prolisso di chiamare direttamente una funzione in un diverso spazio dei nomi e, in ogni caso, renderebbe le espressioni più complesse.
Stiamo pensando qualcosa tipo: return [[ use_adl ]] (a + b);
vs. return A::operator+(a, b);
?
fonte
2011-01-05 09:49:39
Non ci ho mai pensato. Quindi anche io voglio saperlo. Buona domanda! – Nawaz