0

C++의 다음과 같은 간단한 코드에서 f (i) 함수를 사용하는 'count_out'이라는 간단한 프로 시저를 소개합니다. 이 함수는 int 인수를 사용하여 int를 반환하고 10 개의 연속 점에서이 함수를 평가하고 결과를 인쇄합니다.일부 (모든 것이 아닌) 인수가 지정되어있는 동안 함수에 대한 포인터 전달

이제 'count_out'은 int를 취하고 int를 반환하는 'multiplyby2'와 같은 함수에서 잘 작동합니다. 그러나 'count_out'프로 시저에 'add'와 같은 함수를 제공하고 싶습니다.이 함수는 두 개의 int를 취합니다. 그러나 'add'가 'int f (int)'함수처럼 보이도록하려면 두 번째 인수 (b)를 예를 들어로 지정합니다. 10. 하지만 어떻게 C++이 이것을 이해할 수 있을까요? 두 번째 인수가 지정된 'add'를 단일 int를 사용하고 int를 반환하는 함수로 사용하여 'count_out'에 피드를 제공 할 수 있습니까?

// C++ code snippet: 

#include <iostream> 
using namespace std ; 

int multiplyby2 (int i) { 
    return 2 * i ; 
} 

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

void count_out(int (*f) (int)){ 
    for(int i=1; i<=10; i++) cout << f(i) << endl ; 
} 

void main() { 

    count_out (&multiplyby2) ; // works fine. 
    count_out (&add (,10)) ; // produces compilation errors! 
    //note that 'add (int a , 10)' would be a function which returns a + 10 . 

} 
+2

['std :: bind'] (http://en.cppreference.com/w/cpp/utility/functional/bind)를보십시오. – juanchopanza

답변

2

람다 트릭을 수행해야

count_out([](int n) { return add(n, 10); }); 

비 캡처 람다는 각각의 함수 포인터 타입에 암시 적으로 변환된다.