Namespaces
Variants

std:: binder1st, std:: binder2nd

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
binder1st binder2nd
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
Definido en el encabezado <functional>
template < class Fn >

class binder1st
: public std:: unary_function < typename Fn :: second_argument_type ,
typename Fn :: result_type > {
protected :
Fn op ;
typename Fn :: first_argument_type value ;
public :
binder1st ( const Fn & fn,
const typename Fn :: first_argument_type & value ) ;

typename Fn :: result_type
operator ( ) ( const typename Fn :: second_argument_type & x ) const ;

typename Fn :: result_type
operator ( ) ( typename Fn :: second_argument_type & x ) const ;

} ;
(1) (obsoleto en C++11)
(eliminado en C++17)
template < class Fn >

class binder2nd
: public std:: unary_function < typename Fn :: first_argument_type ,
typename Fn :: result_type > {
protected :
Fn op ;
typename Fn :: second_argument_type value ;
public :
binder2nd ( const Fn & fn,
const typename Fn :: second_argument_type & value ) ;

typename Fn :: result_type
operator ( ) ( const typename Fn :: first_argument_type & x ) const ;

typename Fn :: result_type
operator ( ) ( typename Fn :: first_argument_type & x ) const ;

} ;
(2) (obsoleto en C++11)
(eliminado en C++17)

Un objeto función que vincula un argumento a una función binaria.

El valor del parámetro se pasa al objeto en el momento de la construcción y se almacena dentro del objeto. Cada vez que se invoca el objeto función mediante operator() , el valor almacenado se pasa como uno de los argumentos, mientras que el otro argumento se pasa como argumento de operator() . El objeto función resultante es una función unaria.

1) Vincula el primer parámetro al valor value proporcionado durante la construcción del objeto.
2) Enlaza el segundo parámetro al valor value proporcionado durante la construcción del objeto.

Ejemplo

#include <cmath>
#include <functional>
#include <iostream>
#include <vector>
const double pi = std::acos(-1); // usar std::numbers::pi en C++20
int main()
{
    // obsoleto en C++11, eliminado en C++17
    auto f1 = std::bind1st(std::multiplies<double>(), pi / 180.0);
    // reemplazo en C++11
    auto f2 = [](double a) { return a * pi / 180.0; };
    for (double n : {0, 30, 45, 60, 90, 180})
        std::cout << n << \t" << std::fixed << "= "
                  << f1(n) << " rad (usando binder)\t= "
                  << f2(n) << " rad (usando lambda)\n"
                  << std::defaultfloat;
}

Salida:

0°	= 0.000000 rad (usando binder)	= 0.000000 rad (usando lambda)
30°	= 0.523599 rad (usando binder)	= 0.523599 rad (usando lambda)
45°	= 0.785398 rad (usando binder)	= 0.785398 rad (usando lambda)
60°	= 1.047198 rad (usando binder)	= 1.047198 rad (usando lambda)
90°	= 1.570796 rad (usando binder)	= 1.570796 rad (usando lambda)
180°	= 3.141593 rad (usando binder)	= 3.141593 rad (usando lambda)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 109 C++98 operator() no podía modificar el argumento pasado se añadieron sobrecargas para manejar esto

Véase también

(obsoleto en C++11) (eliminado en C++17)
vincula un argumento a una función binaria
(plantilla de función)