6 Temmuz 2017 Perşembe

lambda

Giriş
Şu satırı dahil ederiz.
#include <boost/lambda/lambda.hpp>
bind
Boost ile iki tane farklı bind kütüphanesi geliyor. İlki boost::bind, ikincisi ise boost::lambda::bind. C++11 ile bence her ikisine de gerek kalmadı.
Örnek
Şu satırı dahil ederiz.
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
Şöyle yaparız.
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};

std::for_each(a.begin(), a.end(),
  std::cout << boost::lambda::bind(static_cast<double(*)(double)>(std::sqrt),
                                   boost::lambda::_1) << " "
);
Çıktı olarak şunu alırız.
1 2 3 4 5 6 
Placeholder 
C++11 ile gelen std::placeholder sadece std::bind ile kullanılır.  boost::placeholder ilaveten lambda gibi de kullanılabilir. Yani std::placeholder ve boost::placeholder tam olarak aynı değil
Şöyle yaparız.
include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
  using namespace boost::lambda;
  typedef std::istream_iterator<int> in;

  std::for_each(
                in(std::cin), in(), std::cout << (_1 * 3) << " " );
}
Şöyle yaparız.
#include <vector>
#include <boost/lambda/lambda.hpp>

using boost::lambda::_1;
using namespace std;

int main()
{
  vector<int> coll{-1, 2, -2, 3, 5, 7};
  count_if(begin(coll), end(coll), _1 > 0 && _1 < 3);
}
Şöyle yaparız.
lambda::bind(&internal::on_accept, lambda::_1)

Hiç yorum yok:

Yorum Gönder