要把函数作为参数传递时,有两种方法:1.函数指针;2.仿函数.
函数指针的方法比较常用:
Code
typedef int (*pf)(int,int);
int f(pf p,int a,int b){
return p(a,b);
}
int add(int a,int b){
return a+b;
}
int main(){
cout<<f(add,1,2)<<endl;
}
但用函数指针时,它无法持有自己的状(局部状态,local states),仿函数就克服了这个缺点.
仿函数:
template
<
class
T
>
class
Sum{
T res;
public
:
Sum(T i
=
0
):res(i){}
void
operator
()(T x){
res
+=
x;
}
T result()
const
{
return
res;
}
};
template
<
class
T
>
struct
testplus{
T
operator
()(
const
T
&
x,
const
T
&
y)
const
{
return
x
+
y;
}
};
int
main(){
list
<
double
>
l;
l.push_back(
1.0
);
l.push_back(
2.0
);
Sum
<
double
>
s;
s
=
for_each(l.begin(),l.end(),s);
cout
<<
"
the sum is
"
<<
s.result()
<<
endl;
//
cout<<plus<int>(1,2)<<endl;//error for lost ()
testplus
<
int
>
plusobj;
cout
<<
plusobj(
1
,
2
)
<<
endl
<<
testplus
<
int
>
()(
2
,
2
);
}