È destinato principalmente a essere passato come parametro di modello a un algoritmo. Non è possibile specificare un operatore come parametro del modello, ma è possibile specificare una funzione. utilizzo tipico sarebbe qualcosa di simile:
template <class compare = std::equal_to<>, class T, class InIter>
bool contains(InIter begin, InIter end, T value, compare cmp={}) {
for (InIter p = begin; p != end; ++p)
if (cmp(*p, value))
return true;
return false;
}
Se si dispone (per esempio) una struttura di qualche tipo che contiene diversi campi, si potrebbe desiderare una funzione di confronto che confronta soltanto alcuni campi specifici che indicano l'identità, come ad come nome di una persona, ma ignorando altri campi come il peso attuale, il grado di retribuzione, ecc. In tal caso, si passa la funzione di confronto come parametro di modello e si può confrontare solo i campi che si interessano.
Per gli altri casi in cui si ha a che fare, ad esempio, cercando una matrice di numeri interi, è possibile utilizzare la funzione di confronto predefinita.
fonte
2015-09-29 18:05:32
Non è possibile passare '==' a una funzione, ma è possibile passare 'std :: equal_to'. – Nawaz
È un po 'storico, dato che puoi anche passare '[] (auto a, auto b) {return a == b; } ' – MSalters
@MSalters: non è std :: equal_to definito dal modello per essere esattamente questo? O almeno, '[] (const T & a, const U & b) {return a == b; } '? – einpoklum