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


另見