Supponiamo la seguente:Specializzazioni di funzioni template esplicite con overload: Perché dovresti farlo?
template <typename T> void foo (T*); // #1
template <typename T> void foo (T); // #2
template <> void foo (int*); // #3
Quando si introduce una specializzazione esplicita di un modello base che ha anche sovraccarichi, la specializzazione non è considerato durante la risoluzione di sovraccarico di progettazione. Lo capisco.
Ma, dato che potrei rendere # 3 un sovraccarico non di modello e sarebbe quindi considerato per la risoluzione di sovraccarico, perché dovrei comunque voler farlo come ho fatto sopra? Esiste un caso d'uso valido per la configurazione dimostrata sopra? L'unica cosa che posso pensare è che se non si è basata sulla deduzione del tipo di modello, non è stato possibile utilizzare le funzioni non modello poiché non avrebbero accettato la sintassi <>
quando le si chiama.
BTW Ho solo rivisto le regole per C++ 03. Non sono sicuro se/come C++ 11 cambi queste regole/comportamenti.
lettura obbligatoria: [GotW # 49 - Template Specialization and Overloading] (http://www.gotw.ca/gotw/049.htm) - TL; DR Non farlo. – sehe
Questo NON è un duplicato. Ti sto chiedendo quando * useresti * le specializzazioni di funzioni esplicite in congiunzione con l'overloading. O, se non dovrebbe essere fatto. Le risposte della domanda collegata NON rispondono a questa domanda. –
Forse c'è un codice non basato sul modello nel tuo codice che accetta un * int. Aggiungere la specializzazione del modello significa che potresti essere esplicito e usare pippo (&i); –
cppguy