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* )
Défini dans l'en-tête <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) (obsolète en C++11)
(supprimé 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) (obsolète en C++11)
(supprimé en C++17)

Un objet fonction qui lie un argument à une fonction binaire.

La valeur du paramètre est transmise à l'objet lors de la construction et stockée dans l'objet. Chaque fois que l'objet fonction est invoqué via operator() , la valeur stockée est transmise comme l'un des arguments, l'autre argument étant transmis comme argument de operator() . L'objet fonction résultant est une fonction unaire.

1) Lie le premier paramètre à la valeur value fournie lors de la construction de l'objet.
2) Lie le deuxième paramètre à la valeur value fournie lors de la construction de l'objet.

Exemple

#include <cmath>
#include <functional>
#include <iostream>
#include <vector>
const double pi = std::acos(-1); // utiliser std::numbers::pi en C++20
int main()
{
    // déprécié en C++11, supprimé en C++17
    auto f1 = std::bind1st(std::multiplies<double>(), pi / 180.0);
    // remplacement 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 (using binder)\t= "
                  << f2(n) << " rad (using lambda)\n"
                  << std::defaultfloat;
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 109 C++98 operator() ne pouvait pas modifier l'argument qui lui était passé surcharges ajoutées pour gérer ce cas

Voir aussi

(obsolète en C++11) (supprimé en C++17)
lie un argument à une fonction binaire
(modèle de fonction)