8 Eylül 2017 Cuma

std::bind2nd

Giriş
İmzası şöyle
template< class F, class T >
std::binder2nd<F> bind2nd (const F& f, const T& x);
binder ise şöyledir
std::binder2nd<F>(f, typename F::second_argument_type(x))
Lambda çıktıktan sonra bu algoritmalara gerek kalmadı. Bir sonuç dönen bir metod üretir.

Örnek - global metod
Şöyle yaparız.
vector<int> v1; 
// Count the number of integers > 10 in the vector 
count_if (v1.begin(), v1.end(), bind2nd( greater<int>(), 10 ) ); 
Örnek - mem_fun
Şöyle yaparız.
struct Foo
{
  bool comp(const Foo& a)
  {
    ...
  }

};

template <class F, class T>
void execute (F f, T a)
{
  std::cout << f (a) << std::endl;
}

Foo a = ...;

execute (std::bind2nd (std::mem_fun(&Foo::comp), b), f1);

Hiç yorum yok:

Yorum Gönder