ptr_fun

转自:http://www.cplusplus.com/reference/std/functional/ptr_fun/

template <class Arg, class Result>
  pointer_to_unary_function<Arg,Result> ptr_fun (Result (*f)(Arg));

template <class Arg1, class Arg2, class Result>
  pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*f)(Arg1,Arg2));
Convert function pointer to function object
Returns a function object that encapsulates function  f .

Function objects  are objects whose class defines member function  operator() . This member function allows the object to be used with the same syntax as a regular function call. Several standard  algorithms  and  adaptors  are designed to be used with function objects.

It is defined with the same behavior as:

template <class Arg, class Result>
  pointer_to_unary_function<Arg,Result> ptr_fun (Result (*f)(Arg))
{
  return pointer_to_unary_function<Arg,Result>(f);
}

template <class Arg1, class Arg2, class Result>
  pointer_to_binary_function<Arg1,Arg2,Result> ptr_fun (Result (*f)(Arg1,Arg2))
{
  return pointer_to_binary_function<Arg1,Arg2,Result>(f);
}



Template parameters

Arg, Arg1, Arg2
Types of the function's arguments.
Result
Function's return type.

Parameters

f
Pointer to a function, taking either one argument (of type  Arg) or two arguments (of types  Arg1 and  Arg2) and returning a value of type  Result.

Return value

A function object equivalent to  f .
pointer_to_unary_function  and  pointer_to_binary_function  are function object types, derived respectively from unary_function  and  binary_function .

Example


// ptr_fun example
#include <iostream>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <numeric>
using namespace std;

int main () {
  char* foo[] = {"10","20","30","40","50"};
  int bar[5];
  int sum;
  transform (foo, foo+5, bar, ptr_fun(atoi) );
  sum = accumulate (bar, bar+5, 0);
  cout << "sum = " << sum << endl;
  return 0;
}


Possible output:
sum = 150

ptr_fun使用
转自:http://topic.csdn.net/u/20100112/16/e1973c74-d81c-4e49-bef8-128ab836800b.html
// ceshi1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include <iostream>
#include <functional>
using std::cout;
using std::endl;
/*
    binary_function
*/
template<typename Arg1,typename Arg2,typename Ret>
class binary_function{
public:
    typedef Arg1 first_argument_type;
    typedef Arg2 second_argument_type;
    typedef Ret return_type;
};
/*
    pointer_to_binary_function
*/
template<typename Arg1,typename Arg2,typename Ret>
class pointer_to_binary_function:public binary_function<Arg1,Arg2,Ret>{
private:
    Ret (*pmf)(Arg1,Arg2);
public:
    explicit pointer_to_binary_function(Ret (*pmf_)(Arg1,Arg2))
        :pmf(pmf_){
    }
    Ret operator()(Arg1 left,Arg2 right){
        return pmf(left,right);
    }
};
/*
    ptr_fun
*/
template<typename Arg1,typename Arg2,typename Ret>
pointer_to_binary_function<Arg1,Arg2,Ret> ptr_fun(Ret (*pf)(Arg1,Arg2)){
    return pointer_to_binary_function<Arg1,Arg2,Ret>(pf);
}
/*
    test_function
*/
void test_function(int a,int b){
    cout<<"Arg1 is "<<a<<endl;
    cout<<"Arg2 is "<<b<<endl;
}
/*
    main
*/
int main(int argc,char* argv[]){
    int a=3;
    int b=30;
    (pointer_to_binary_function<int,int,void>(test_function))(a,b);
    return 0;
}






你可能感兴趣的:(function,object,Class,fun,returning,Types)