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)或两个参数(类型为Arg1和Arg2)并返回一个类型为Result的值。
返回值
一个等价于
f的函数对象。
pointer_to_unary_function和
pointer_to_binary_function是函数对象类型,它们分别派生自
unary_function和
binary_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;
}
|
可能的输出
另见
- mem_fun
- 将成员函数转换为函数对象(指针版本)(函数模板)
- pointer_to_unary_function
- 从指针生成一元函数对象类 (类模板)
- pointer_to_binary_function
- 从指针生成二元函数对象类 (类模板)
- unary_function
- 一元函数对象基类 (类模板)