function template
<functional>

std::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));
将函数指针转换为函数对象
返回一个封装了函数f的函数对象。

函数对象是定义了成员函数operator()的类对象。该成员函数允许对象以与常规函数调用相同的语法来使用。几个标准的算法适配器被设计用来与函数对象一起使用。

它的定义与以下行为相同:

1
2
3
4
5
6
7
8
9
10
11
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);
}

模板参数

Arg, Arg1, Arg2
函数的参数类型。
Result
函数的返回类型。

参数

f
指向函数的指针,该函数接受一个参数(类型为Arg)或两个参数(类型为Arg1Arg2)并返回一个类型为Result的值。

返回值

一个等价于f的函数对象。
pointer_to_unary_functionpointer_to_binary_function是函数对象类型,它们分别派生自unary_functionbinary_function

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 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;
}

可能的输出

sum = 150


另见