Compartir a través de


binder2nd Class

Una clase de plantilla que proporciona un constructor que convierte un objeto binario de función en un objeto singular de función enlazando el segundo argumento de la función binaria con un valor especificado.

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

Parámetros

  • _Func
    El objeto binario de función para convertirse en un objeto singular de la función.

  • _Right
    El valor al que el segundo argumento del objeto binario de la función debe ser enlazado.

  • _Left
    El valor del argumento que el objeto binario bien compara el valor fijo del segundo argumento.

Valor devuelto

El objeto singular de la función que resultados de enlace el segundo argumento del objeto binario de la función al valor _Right.

Comentarios

La clase de plantilla almacena una copia de un _Func binario del objeto function en Op. Sys., y una copia de _Right en Valor.Define la función operator() miembro como devolver Op. Sys.(_Left, Valor).

Si _Func es un objeto de Operacin tipo y c es una constante, entonces bind2nd ( _Func, c ) es equivalente al constructor de clase binder2nd<Operacin> ( _Func, c ) de binder2nd y más conveniente.

Ejemplo

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

Requisitos

encabezado: <funcional>

espacio de nombres: std

Vea también

Referencia

Seguridad para subprocesos de la biblioteca estándar de C++

Biblioteca de plantillas estándar