Sto cercando di capire cosa succede sotto il cofano di std :: function quando usato in combinazione con chiusure. Non riesco ancora a capirlo, ad esempio: quale costruttore viene chiamato? Qualcuno può pubblicare un esempio funzionante di una caduta minimalista nella sostituzione di std :: function che supporta la funzionalità necessaria nel seguente esempio?chiusura C++ e std :: function
#include <functional>
int main(int argc, char* argv[])
{
int mybool = 5;
auto foo = [&] (int arg) {
return mybool * arg;
};
std::function<int(int)> foo2 = foo;
int result = foo2(42);
return 0;
}
In una parola: Magia. È tutto il codice solo per modello, però, così puoi semplicemente * guardarlo * da solo. –
Se trovi che intrigante, ['std :: bind'] (http://en.cppreference.com/w/cpp/utility/functional/bind) ti farà diventare davvero elettrizzato. – WhozCraig
Oltre ai modelli, ci sono un paio di grandi librerie C++ che sono open source (stdlibC++ solitamente usato da GCC, e libC++ di solito usato da clang), quindi puoi anche guardare il codice non basato su modelli. –