共用方式為


mem_fun_ref Function

Helper 所使用的樣板函式建構函式成員函式的配置器物件執行初始化時,使用參考引數。

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

參數

  • _Pm
    對類別要轉換的 Type 成員函式的指標轉換成函式物件。

傳回值

型別mem_fun_ref_tmem_fun1_ref_tconst 或 non_const 函式物件。

範例

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

需求

標題: <functional>

命名空間: std

請參閱

參考

標準樣板程式庫