Share via


binder2nd, classe

Modèle de classe fournissant un constructeur qui convertit un objet de fonction binaire en objet de fonction unaire en liant le deuxième argument de la fonction binaire à une valeur spécifiée. Déconseillé en C++11, supprimé en C++17.

Syntaxe

template <class Operation>
class binder2nd
    : public unaryFunction <typename Operation::first_argument_type,
    typename Operation::result_type>
{
    typedef typename Operation::argument_type argument_type;
    typedef typename Operation::result_type result_type;
    binder2nd(
        const Operation& func,
        const typename Operation::second_argument_type& right);

    result_type operator()(const argument_type& left) const;
    result_type operator()(argument_type& left) const;
};

Paramètres

func
Objet de fonction binaire à convertir en un objet de fonction unaire.

right
Valeur à laquelle le deuxième argument de l’objet de fonction binaire doit être lié.

left
Valeur de l’argument que l’objet binaire adapté compare à la valeur fixe du deuxième argument.

Valeur retournée

Objet de fonction unaire qui résulte de la liaison du deuxième argument de l’objet de fonction binaire à droite de la valeur.

Notes

Le modèle de classe stocke une copie d’un objet de fonction binaire func in op, et une copie de droite dans value. Il définit sa fonction operator() membre comme retournant op(left, value).

Si func est un objet de type Operation et c est une constante, bind2nd(func, c) est équivalent au binder2nd constructeur binder2nd<Operation>(func, c)de classe, et plus pratique.

Exemple

// functional_binder2nd.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int> v1;
    vector<int>::iterator Iter;

    int i;
    for (i = 0; i <= 5; i++)
    {
        v1.push_back(5 * i);
    }

    cout << "The vector v1 = ( ";
    for (Iter = v1.begin(); Iter != v1.end(); Iter++)
        cout << *Iter << " ";
    cout << ")" << endl;

    // Count the number of integers > 10 in the vector
    vector<int>::iterator::difference_type result1;
    result1 = count_if(v1.begin(), v1.end(),
        binder2nd<greater<int> >(greater<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1 << "." << endl;

    // Compare using binder1st fixing 1st argument:
    // count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(),
        binder1st<greater<int> >(greater<int>(), 10));
    cout << "The number of elements in v1 less than 10 is: "
         << result2 << "." << endl;
}
The vector v1 = ( 0 5 10 15 20 25 )
The number of elements in v1 greater than 10 is: 3.
The number of elements in v1 less than 10 is: 2.