ptr_fun 函数

帮助程序使用的模板函数将一元和二函数指针,分别,到一元和二可以容纳的函数。

template<class Arg, class Result> 
   pointer_to_unary_function<Arg, Result, Result (*)(Arg)> 
      ptr_fun(Result (*_pfunc)(Arg)); 
template<class Arg1, class Arg2, class Result> 
   pointer_to_binary_function<Arg1, Arg2, Result, Result (*)(Arg1, Arg2)> 
      ptr_fun(Result (*_pfunc)(Arg1, Arg2));

参数

  • _pfunc
    要转换的一元或二进制函数指向可容纳的函数。

返回值

第一个模板函数返回一元函数 pointer_to_unary_function <Arg结果>(*_pfunc)。

第二个模板函数返回二进制函数 pointer_to_binary_function <Arg1Arg2结果>(*_pfunc)。

备注

函数指针是函数对象,并可以传递给需要函数作为参数的标准模板库 (STL) 算法,但它是不可靠的。 若要将它与一个适配器,例如绑定值。它或将它与非,必须为其提供使这满足成为可能的嵌套类型。 一元和二函数指针转换由 ptr_fun 帮助器函数允许的函数适配器使用一元和二函数指针)。

示例

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

int main( )
{
    using namespace std;
    vector <char*> v1;
    vector <char*>::iterator Iter1, RIter;

    v1.push_back ( "Open" );
    v1.push_back ( "up" );
    v1.push_back ( "the" );
    v1.push_back ( "opalescent" );
    v1.push_back ( "gates" );

    cout << "Original sequence contains: " ;
    for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; ++Iter1 )
        cout << *Iter1 << " ";
    cout << endl;

    // To search the sequence for "opalescent" 
    // use a pointer_to_function conversion
    RIter = find_if( v1.begin( ), v1.end( ),
        not1 ( bind2nd (ptr_fun ( strcmp ), "opalescent" ) ) );

    if ( RIter != v1.end( ) )  
    {
        cout << "Found a match: " 
            << *RIter << endl;
    }
}

Output

Original sequence contains: Open up the opalescent gates
Found a match: opalescent

要求

标头: <起作用的>

命名空间: std

请参见

参考

标准模板库