mem_fun_ref 函数
帮助器用于成员函数的模板函数构造函数的对象,当初始化适配器使用引用参数。
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_t 或 mem_fun1_ref_t类型的 const 或 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;
}
要求
标头: <起作用的>
命名空间: std