Mi sono imbattuto nella seguente funzione find_if.come funziona la funzione di bind per gli oggetti funzionali in C++
find_if (coll.begin(), coll.end(),
bind(logical_and<bool>(),
bind(greater<int>(),_1,x), bind(less<int>(),_1,y)
)
);
ho il dubbio che come bind (maggiore(), _ 1, x) e si legano (meno(), _ 1, y) vengono valutati e valori bool ritornano lì? Questo non funzionerà altrimenti come mostrato di seguito.
#include <iostream>
#include <functional>
int main()
{
using namespace std::placeholders;
//auto fn = std::bind(std::greater<int>(), 5, _1);
//std::cout << fn(7) << std::endl;
//std::cout << typeid(fn).name() << std::endl;
auto fn1 = std::bind(std::greater<int>(),5,6);
auto fn2 = std::bind(std::less<int>(),7,5);
std::cout << std::bind(std::logical_and<bool>(), fn1, fn2)(); // how this works??
std::cout << std::logical_and<bool>()(fn1, fn2)(); // Compilation error
}
Davvero curioso di sapere come i funtori sono chiamati all'interno della funzione di collegamento. Qualcuno può spiegare come funziona? Grazie in anticipo.
Considerando che [ 'std :: logical_and'] (http://en.cppreference.com/w/cpp/utility/functional/logical_and) * valuta * i suoi argomenti, e non li chiama, il codice che mostri non funzionerà. –
'bind' è molto particolare se invocato in modo ricorsivo. Si prega di prendere in considerazione solo l'utilizzo di lambda. – Yakk
Ancora non completamente compreso. Ma dal tuo commento capisco che la funzione bind chiamerà internamente i funtori e il risultato è legato a logico_e? non sono sicuro :( –