Partager via


binder2nd Class

Une classe de modèle fournissant un constructeur qui convertit un objet binaire de fonction dans un objet unaire de fonction en liant le deuxième argument de la fonction binaire à une valeur spécifiée.

template<class Operation>
   class binder2nd
      : public unary_function <
         typename Operation::first_argument_type,
         typename Operation::result_type> 
   {
   public:
   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;
   protected:
   Operation op;
   typename Operation::second_argument_type value;
   };

Paramètres

  • _Func
    L'objet binaire de fonction à convertir en un objet unaire de fonction.

  • _Right
    La valeur à laquelle le deuxième argument de l'objet binaire de fonction doit être lié.

  • _Left
    La valeur de l'argument que l'objet binaire adapté compare à la valeur fixe du deuxième argument.

Valeur de retour

l'objet unaire de fonction que résultats de la liaison le deuxième argument de l'objet binaire de fonction à la valeur _Right.

Notes

La classe de modèle enregistre une copie d'un _Func binaire d'objet de fonction dans op, et une copie d' _Right dans valeur.Il définit sa fonction membre operator() comme retourner op(_Left, valeur).

Si _Func est un objet de type Opération et c'est une constante, puis bind2nd ( _Func, c ) est équivalent au constructeur binder2nd<Opération> de classe d' binder2nd ( _Func, c ) 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;
}
  
  

Configuration requise

en-tête : <functional>

l'espace de noms : DST

Voir aussi

Référence

Sécurité des threads dans la bibliothèque C++ standard

Modèles Standard