Classe binder2nd

Modello di classe che fornisce un costruttore che converte un oggetto funzione binaria in un oggetto funzione unario associando il secondo argomento della funzione binaria a un valore specificato. Deprecato in C++11, rimosso in C++17.

Sintassi

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;
};

Parametri

func
Oggetto funzione binaria da convertire in un oggetto funzione unaria.

right
Valore a cui deve essere associato il secondo argomento dell'oggetto funzione binaria.

left
Valore dell'argomento che l'oggetto binario adattato confronta con il valore predefinito del secondo argomento.

Valore restituito

Oggetto funzione unario risultante dall'associazione del secondo argomento dell'oggetto funzione binaria a destra del valore.

Osservazioni:

Il modello di classe archivia una copia di un oggetto funzione binaria func in ope una copia di destra in value. Definisce la funzione operator() membro come restituzione di op(left, value).

Se func è un oggetto di tipo Operation e c è una costante, bind2nd(func, c) equivale al costruttore binder2nd<Operation>(func, c)della binder2nd classe e più pratico.

Esempio

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