现在的位置: 首页 > 综合 > 正文

函数作为参数的传递

2014年01月27日 ⁄ 综合 ⁄ 共 808字 ⁄ 字号 评论关闭

函数作为参数的传递

要把函数作为参数传递时,有两种方法: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
);


}


抱歉!评论已关闭.