Sono confuso sul motivo per cui è necessario std::mem_fn
.Perché usare mem_fn?
Ho una funzione che accetta qualsiasi chiamabile (lambda, puntatore di funzione, ecc.) E la lega a un argomento.
Esempio:
template<class T>
void Class::DoBinding(T callable) {
m_callable = std::bind(callable, _1, 4);
}
//somewhere else
Item item;
m_callable(item);
Tutti gli esempi di codice che ho visto fare:
//some defined member function
Item::Foo(int n);
DoBinding(std::mem_fn(&Item::Foo));
Perché non può essere semplicemente:
DoBinding(&Item::Foo);
Sembra quest'ultimo è callable senza dover usare std :: mem_fn, quindi perché è necessario?
No, non è necessario 'mem_fn' per quello. Ne hai bisogno per altre cose. –
Non si dovrebbe mai passare a 'std :: bind' un valore di un tipo sconosciuto. Se il tipo è esso stesso un'espressione di binding, il comportamento è sorprendente. In altre parole, 'std :: bind' dovrebbe essere usato nel codice foglia, non nel codice generico. –
E riguardo l'uso di una lambda invece di std :: bind? Sento che la sintassi è più leggibile, e quando si usa C++ 14 dovrebbe coprire tutti (quasi tutti?) Gli stessi casi d'uso associati a – AndyG