Namespaces
Variants

std::binder1st, std::binder2nd

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de funcionalidades de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación tripartita
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Objetos función
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de operadores transparentes
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Enlazadores y adaptadores antiguos
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)
(hasta C++17*)  
(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta C++20*)
(hasta C++17*)(hasta C++17*)
(hasta C++17*)(hasta C++17*)

(hasta C++17*)
(hasta C++17*)(hasta C++17*)(hasta C++17*)(hasta C++17*)
(hasta C++20*)
(hasta 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 enlaza 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. Siempre que se invoca el objeto función a través de operator(), el valor almacenado se pasa como uno de los argumentos, el otro argumento se pasa como argumento de operator(). El objeto función resultante es una función unaria.

1) Enlaza el primer parámetro al valor value dado en la construcción del objeto.
2) Enlaza el segundo parámetro al valor value dado en 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)