'daki işlevsel nesneler için nasıl çalışır? Aşağıdaki find_if işleviyle karşılaştım.bağlama işlevi, C++
find_if (coll.begin(), coll.end(),
bind(logical_and<bool>(),
bind(greater<int>(),_1,x), bind(less<int>(),_1,y)
)
);
şüphe ne kadar bağlanır (yüksek(), _ 1, x) ve bağlama (daha az(), _ 1, y) değerlendirilir ve geri BOOL değerler vardır mi var? Bu, aşağıda gösterildiği gibi çalışmaz.
#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
}
Bağlayıcıların bind işlevinin içinde nasıl çağrıldığını bilmek gerçekten meraklıdır. Birisi bunun nasıl çalıştığını açıklayabilir mi? Şimdiden teşekkürler.
[ 'std düşünüldüğünde :: logical_and'] (http://en.cppreference.com/w/cpp/utility/functional/logical_and) * argümanlarını değerlendirir ve onları çağırmaz, gösterdiğiniz kod işe yaramaz. –
'bind', yinelemeli olarak çağrıldığında çok ilginçtir. Lütfen sadece lambdas kullanmayı düşünün. – Yakk
Hala tam olarak anlaşılmadı. Ama yorumunuzdan, bağlama fonksiyonunun dahili olarak functor'ları çağıracağını ve bunun sonucu logical_and'a bağlandığını anlıyorum. emin değil :( –