Ich stieß auf die folgende find_if-Funktion.Funktionsweise der Bindefunktion für funktionale Objekte in C++
find_if (coll.begin(), coll.end(),
bind(logical_and<bool>(),
bind(greater<int>(),_1,x), bind(less<int>(),_1,y)
)
);
Ich habe die Zweifel, dass, wie die bind (größer() _ 1, x) und bind (weniger() _ 1, y) werden ausgewertet und die Rückkehr Bool Werte gibt? Dies funktioniert nicht wie unten gezeigt.
#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
}
Wirklich neugierig zu wissen, wie die Funktoren innerhalb der Bind-Funktion aufgerufen werden. Kann mir bitte jemand erklären, wie das geht? Danke im Voraus.
Bedenkt man, dass [ 'std :: logical_and'] (http://en.cppreference.com/w/cpp/utility/functional/logical_and) * wertet * seine Argumente aus und ruft sie nicht an, der von Ihnen angezeigte Code funktioniert nicht. –
'bind' ist sehr skurril, wenn rekursiv aufgerufen wird. Bitte denken Sie daran, nur Lambdas zu verwenden. – Yakk
Noch nicht vollständig verstanden. Aber von deinem Kommentar verstehe ich, dass die Bindefunktion die Funktoren intern aufrufen wird und ihr Ergebnis an die logische_und gebunden ist? nicht sicher :( –