您的位置:首页 > 其它

函数作为参数的传递

2009-06-08 15:27 148 查看
函数作为参数的传递

要把函数作为参数传递时,有两种方法:1.函数指针;2.仿函数.

函数指针的方法比较常用:

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
);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  each