5

La libreria standard differenzia le versioni predicate e non predicative degli algoritmi generici. Ad esempio, std::sort() assomiglia:Perché differenziare le versioni di predicato e non di predicato per algoritmi generici?

template< class RandomIt > 
void sort(RandomIt first, RandomIt last); 

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

C'è qualche problema nel solo scrivendo il seguente?

template< class RandomIt, class Compare = std::less<void>> 
void sort(RandomIt first, RandomIt last, Compare comp = Compare{}); 
+11

Non c'erano argomenti modello predefiniti per modelli di funzioni in C++ 03. –

+0

@ T.C. Quindi, supponiamo di ridisegnare il tutto solo se la seconda forma dovrebbe essere preferita? – Lingxi

+0

@ T.C. Credo che la cosa dell'argomento template di default sia in realtà una risposta. – Angew

risposta

8

Piuttosto ragioni storiche.

C++ 98/03 non ha argomenti modello predefiniti per i modelli di funzione, quindi ha dovuto utilizzare due overload. E cambiandolo in seguito si può rompere il codice utente.

Quindi, supponiamo di ridisegnare il tutto solo se si preferisce il secondo modulo ?

Questo è ciò che fa lo current Ranges TS working draft.

Problemi correlati