std::bind1st,std::bind2nd (3) - Linux Manuals

std::bind1st,std::bind2nd: std::bind1st,std::bind2nd

NAME

std::bind1st,std::bind2nd - std::bind1st,std::bind2nd

Synopsis


Defined in header <functional>
template< class F, class T > (1) (deprecated in C++11)
std::binder1st<F> bind1st( const F& f, const T& x ); (removed in C++17)
template< class F, class T > (2) (deprecated in C++11)
std::binder2nd<F> bind2nd( const F& f, const T& x ); (removed in C++17)


Binds a given argument x to a first or second parameter of the given binary function object f. That is, stores x within the resulting wrapper, which, if called, passes x as the first or the second parameter of f.
1) Binds the first argument of f to x. Effectively calls std::binder1st<F>(f, typename F::first_argument_type(x)).
2) Binds the second argument of f to x. Effectively calls std::binder2nd<F>(f, typename F::second_argument_type(x)).

Parameters


f - pointer to a function to bind an argument to
x - argument to bind to f

Return value


A function object wrapping f and x.

Exceptions


(none)

Example


// Run this code


  #include <iostream>
  #include <algorithm>
  #include <functional>
  #include <cmath>
  #include <vector>


  int main()
  {
      std::vector<double> a= {0, 30, 45, 60, 90, 180};
      std::vector<double> r(a.size());
      double pi = std::acos(-1);


      std::transform(a.begin(), a.end(), r.begin(),
          std::bind1st(std::multiplies<double>(), pi / 180.));
  // equivalent lambda: [pi](double a){ return a*pi/180.; });


      for(size_t n = 0; n < a.size(); ++n)
          std::cout << a[n] << " deg = " << r[n] << " rad\n";
  }

Output:


  0 deg = 0 rad
  30 deg = 0.523599 rad
  45 deg = 0.785398 rad
  60 deg = 1.0472 rad
  90 deg = 1.5708 rad
  180 deg = 3.14159 rad

See also


binder1st function object holding a binary function and one of its arguments
binder2nd (class template)


(deprecated in C++11)(removed in C++17)