Partager via


bind2nd Function

Une fonction d'assistance de modèle qui crée un adaptateur pour convertir 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 Type>
   binder2nd <Operation> bind2nd(
      const Operation& _Func, 
      const Type& _Right
   );

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é.

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

Les classeurs de fonction est un genre d'adaptateur de fonction et, car ils retournent des objets de fonction, peuvent être utilisés dans certains types de composition de fonction pour construire des expressions plus complexes et plus puissantes.

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

Exemple

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

using namespace std;

// Creation of a user-defined function object
// that inherits from the unary_function base class
class greaterthan15: unary_function<int, bool>
{
public:
    result_type operator()(argument_type i)
    {
        return (result_type)(i > 15);
    }
};

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 result1a;
    result1a = count_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1a << "." << endl;

    // Compare counting the number of integers > 15 in the vector
    // with a user-defined function object
    vector<int>::iterator::difference_type result1b;
    result1b = count_if(v1.begin(), v1.end(), greaterthan15());
    cout << "The number of elements in v1 greater than 15 is: "
         << result1b << "." << endl;

    // Count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(), bind1st(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

Modèles Standard