2013-05-22 3 views
0
template <typename Fn> 
    void do_stuff(Fn f, int a, int b) { 
    int c = f(a, b); 
    do_something(c); 
    } 

그럼 내가 전화 :펑 터를 사용해야하는 이유는 무엇입니까? 그냥 대신 함수 참조를 전달합니까?

do_stuff(Add(),1,2); 

여기 펑은()를 추가합니다.

나는 이것이 콜백이라는 것을 알고있다. 그래서 내 질문은이 purspose에 대한 functor를 사용하는 이유는 무엇입니까? 질수 I 함수

int add(int a,int b){return a+b} 

를 생성하고 펑 대신이 함수의 참조를 전달?

답변

2

펑터는 상태를 가질 수 있습니다.

당신은 어떻게 일반 함수로이

struct adder_ramp 
{ 
    int offset; 
    int operator()(int a, int b) { ++offset; return a + b + offset; } 
}; 

변환 할 ?

+0

괜찮 았어. 그 상태를 유지하기 위해서 (콜백 외에) 펑터는 usd이다. 그래서 내가 상태를 원한다면 함수 참조를 전달함으로써 콜백을 수행 할 수있다 ?? – Nikhil

+0

@Nikhil : 맞습니다. –