Udostępnij za pośrednictwem


binder2nd — Klasa

Szablon klasy dostarczający konstruktor, który konwertuje obiekt funkcji binarnej na obiekt funkcji jednoargumentowej przez powiązanie drugiego argumentu funkcji binarnej z określoną wartością. Przestarzałe w języku C++11 usunięte w języku C++17.

Składnia

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

Parametry

func
Obiekt funkcji binarnej, który ma zostać przekonwertowany na obiekt funkcji jednoargumentowej.

Prawo
Wartość, do której ma być powiązany drugi argument obiektu funkcji binarnej.

Lewej
Wartość argumentu, który jest porównywany przez dostosowany obiekt binarny z stałą wartością drugiego argumentu.

Wartość zwracana

Obiekt funkcji jednoargumentowej, który wynika z powiązania drugiego argumentu obiektu funkcji binarnej z prawem wartości.

Uwagi

Szablon klasy przechowuje kopię obiektu funkcji binarnej func w pliku opi kopię prawej w valuepliku . Definiuje funkcję składową jako zwracaną op(left, value)przez funkcję operator() .

Jeśli func jest obiektem typu Operation i c jest stałą, bind2nd(func, c) jest odpowiednikiem binder2nd konstruktora binder2nd<Operation>(func, c)klasy i wygodniejsze.

Przykład

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