class Test{
public:
int work(){
cout << "in work " << endl;
return 0;
}
void work(int x){
//cout << "x = " << x << endl;
cout << "in work..." << endl;
}
};
int main(){
Test test;
std::function<void()> f = std::bind(&Test::work, &test);
thread th(f);
th.join();
return 0;
}
Come sopra codice, voglio legare funzione membro void work(void)
di una classe (Diamo il nome Test) , ma si verifica l'errore del compilatore che dice che non è possibile determinare quale funzione sovrascritta utilizzare.Come associare una delle funzioni membro con lo stesso nome in una classe, con C++ 11 std :: bind
Non riesco a cambiare il Test di classe poiché appartiene a una lib, come raggiungere il mio obiettivo? Grazie in anticipo!
Preferisci 'auto f = [& test] {test.work(); }; 'a qualsiasi espressione di binding –
lambda è davvero conveniente di std :: bind per realizzare il mio obiettivo, dopo aver visto queste risposte – debugman
Si noti inoltre che usando' std :: function' invece di 'auto' si paga il prezzo di tipo- la cancellazione –