2013-11-25 4 views
1

값으로 전달 된 여러 매개 변수로 정의 된 함수가 있습니다. 매개 변수에 대한 함수와 입력은 모두 공통 전역 변수에 따라 다릅니다. 나 자신의 범위 내에서 실행하는 동안 매개 변수의 입력을 재평가하기 위해 함수를 얻는 방법이 필요하다. 다음은 간단한 코드 버전입니다.C++ 업데이트 함수 인수

#include <iostream> 

using namespace std; 

int Sum(int arg1, int from, int to); 
int i; 
int func(); 

int main(int argc, char *argv[]) 
{ 

    Sum(func(), 0, 10); 

    return 0; 
} 

int Sum(int arg1, int from, int to) 
{ 
    int out = 0; 
    for (i = from; i <= to; i++) 
    { 
     out += arg1; 
     cout << "arg1 = " << arg1 << ", out = " << out << endl; 
    } 
    return out; 
} 

int func() 
{ 
    return i; 
} 

일부 하이라이트 :
*이 여기에 기능 합계에 매개 변수 ARG1의 입력 값을 업데이트하는 것을 시도하고있다().

  • 보통 I 참조로 파라미터를 정의함으로써이 문제를 해결하는 것이다 (이 경우, 파라미터는 함수 요컨대 ARG1이다).

  • 그러나이 함수를 사용하는 방법은 일반적으로 여러 입력 값을 인라인으로 결합하기 때문에 값으로 전달해야합니다.

합계에 대한 입력과 함께 이름없는 임시 함수를 정의 할 수있는 방법이 있습니까? 그렇다면 참조로 매개 변수를 전달하고 내 문제를 해결할 수 있습니다. 또는이 작품을 만드는 방법에 대한 다른 아이디어?

감사합니다.

답변

1

함수 포인터를 사용할 수있는 곳입니다. 대신 func()를 전달하는, 당신은 단순히 func 통과하고 함수 내에서 호출 : 함수 포인터에 대한

int Sum(int (*func_arg1)(void), int from, int to) 
{ 
    int out = 0; 
    for (i = from; i <= to; i++) 
    { 
     int arg1 = func_arg1(); 
     out += arg1; 
     cout << "arg1 = " << arg1 << ", out = " << out << endl; 
    } 
    return out; 
} 

구문은 C와 C의 특이한 조금입니다 ++. int (*func_arg1)(void) 선언은 인수를 취하지 않고 int을 반환하는 함수에 대한 포인터 인 func_arg1이라는 심볼을 선언합니다. 이 경우 해당 기호는 Sum의 첫 번째 인수이기도합니다. 좋은 잠재력을 가지고

Sum(func, 0, 10); 
+0

을 :

당신이 당신의 프로그램으로 만들 필요가있는 유일한 다른 변화가

Sum에 대한 프로토 타입은 위의 기능에 맞게, 다음과 같이 Sum를 호출한다. 여러 가지 표현식을 합계 입력으로 사용할 수 있습니다. 예 : Sum (func(), 0, 10) 대신 Sum (func() * i, 0, 10)을 사용합니다. 내가 올바르게 이해한다면,이 접근법은 효과가 없을 것입니다. 여러 표현식을 하나의 함수로 묶는 방법을 찾아야합니다. 옳은? –

+0

그보다 더 멋지게하려면 C++ 11 람다 식을 조사해야합니다. 그들은 당신에게 내가 생각하는 유연성을 제공합니다. –