2013-05-22 2 views
-2
class Add 
    { 
     Add(){cout<<"ctor";} 
     void operator()(int a ,int b){return a+b;} 

    } 
    int main() 
    { 
     Add(3,4); 
    } 

추가는 펑터이고, 펑터는 콜백 메커니즘에 도움이 될 수 있습니까? 그럼 여기서 일어나는 일이 무엇입니까 ??이 코드에서 어디에서 콜백이 발생합니까?

+0

여기서는 발생하지 않습니다. – SLaks

답변

2

콜백 메커니즘에 도움이 될 수있는 기능은 무엇입니까?

예. functor를 사용하여 수행중인 작업의 일부로 사용자 정의 연산을 수행하는 함수 템플릿을 작성할 수 있습니다. 예를 들면 :

template <typename Fn> 
void do_stuff(Fn f, int a, int b) { 
    int c = f(a, b); 
    do_something(c); 
} 

한 다음 thusly 히 당신의 작업을 주입 :

do_stuff(Add(), 3, 4); 

한 특정 사용 정상적인 비교를 지원하지 않는 유형을 비교하기 위해 사용자가 제공 한 펑를 사용할 수 std::sort 알고리즘입니다 연산자.

그래서 여기서 어떻게됩니까 ??

그렇지 않습니다. 코드가 컴파일되지 않습니다. (이 값하지 void을 반환 이후) 반환 값을 수정 한 후에는 만들 수 및

Add()(3,4); 

으로 함수를 호출하지만 특히 유용하지 않습니다.

+0

위의 do_stuff 메소드에서, 첫 번째 매개 변수로 Fn f를 전달했습니다. 단지 함수에 대한 참조 만 전달합니다. Functor의 대체물로 간주 될 수 있습니까? 다시 말해서 펑 터를 사용해야하는 이유는 무엇입니까? Cant v는 함수 호출에 대한 참조를 전달한다. – Nikhil

+0

@Nikhil : 함수에 대한 펑터의 이점 (일반적으로는 아니지만)은 객체이므로 코드에 데이터를 바인딩하여 클로저 *를 형성 할 수 있습니다. 그러나 그것을 적절하게 묘사하는 것은 책의 전체 장을 가져갈 것입니다. –

관련 문제