Partager via


mem_fun_ref, fonction

Fonctions modèle d'assistance utilisées pour construire des adaptateurs d'objet fonction pour les méthodes une fois initialisées en utilisant les arguments de référence.

template<class Result, class Type> 
   mem_fun_ref_t<Result, Type> mem_fun_ref( 
      Result (Type::*_Pm )( )  
   ); 
template<class Result, class Type, class Arg> 
   mem_fun1_ref_t<Result, Type, Arg>  
      mem_fun_ref( 
         Result (Type::*_Pm )( Arg )  
      ); 
template<class Result, class Type> 
   const_mem_fun_ref_t<Result, Type>  
      mem_fun_ref( 
         Result Type::*_Pm )( ) const  
      ); 
template<class Result, class Type, class Arg> 
   const_mem_fun1_ref_t<Result, Type, Arg>  
      mem_fun_ref( 
         Result ( _Type::*_Pm )( Arg ) const  
      );

Paramètres

  • _Pm
    Pointeur vers la fonction membre de la classe Type à convertir en une fonction objet.

Valeur de retour

Fonction const ou non_const de typemem_fun_ref_t ou mem_fun1_ref_t.

Exemple

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

using namespace std;

class NumVals
   {
   int val;
   public:
   NumVals ( ) { val = 0; }
   NumVals ( int j ) { val = j; }

   bool display ( ) { cout << val << " "; return true; }
   bool isEven ( ) { return ( bool )  !( val %2 ); }
   bool isPrime( )
   {
      if (val < 2) { return true; }
      for (int i = 2; i <= val / i; ++i)
      {
         if (val % i == 0) { return false; }
      }
      return true;
   }
};

int main( )
{
   vector <NumVals> v1 ( 13 ), v2 ( 13 );
   vector <NumVals>::iterator v1_Iter, v2_Iter;
   int i, k;

   for ( i = 0; i < 13; i++ ) v1 [ i ] = NumVals ( i+1 );
   for ( k = 0; k < 13; k++ ) v2 [ k ] = NumVals ( k+1 );

   cout << "The original values stored in v1 are: " ;
   for_each( v1.begin( ), v1.end( ), 
   mem_fun_ref ( &NumVals::display ) );
   cout << endl;

   // Use of mem_fun_ref calling member function through a reference
   // remove the primes in the vector using isPrime ( )
   v1_Iter = remove_if ( v1.begin( ),  v1.end( ), 
      mem_fun_ref ( &NumVals::isPrime ) );   
   cout << "With the primes removed, the remaining values in v1 are: " ;
   for_each( v1.begin( ), v1_Iter, 
   mem_fun_ref ( &NumVals::display ) );
   cout << endl;

   cout << "The original values stored in v2 are: " ;
   for_each( v2.begin( ), v2.end( ), 
   mem_fun_ref ( &NumVals::display ) );
   cout << endl;

   // Use of mem_fun_ref calling member function through a reference
   // remove the even numbers in the vector v2 using isEven ( )
   v2_Iter = remove_if ( v2.begin( ),  v2.end( ), 
      mem_fun_ref ( &NumVals::isEven ) );   
   cout << "With the even numbers removed, the remaining values are: " ;
   for_each( v2.begin( ),  v2_Iter, 
   mem_fun_ref ( &NumVals::display ) );
   cout << endl;
}
  

Configuration requise

En-tête : <functional>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)