2011-08-22 1 views
8

필자는 함수 포인터에 대해 읽고 다른 함수의 매개 변수로 사용하고 있습니다. 내 질문에 포인터를 사용하지 않고 참조로 함수를 전달하는 방법을 무엇입니까? 나는 인터넷에서 대답을 찾으려고했지만 좋은 대답을 찾지 못했습니다. 나는 당신이 다음과 같이 참조로 변수를 전달할 수 있다는 것을 알고있다 : void funct(int& anInt);. 어떻게 이와 비슷한 일을하겠습니까? 대신 변수에 대한 참조 대신 함수에 대한 참조가 매개 변수입니까? 또한 함수 본문에서 함수에 대한 참조를 어떻게 사용합니까?C++ : 참조 함수를 다른 함수로 전달하는 방법은 무엇입니까?

+0

참고 :. 당신은 기능을 전달할 수 없습니다. 함수에 대한 참조 또는 포인터 만 전달할 수 있습니다. –

답변

22
#include <iostream> 
using namespace std; 

void doCall(void (&f)(int)) 
{ 
    f(42); 
} 

void foo(int x) 
{ 
    cout << "The answer might be " << x << "." << endl; 
} 

int main() 
{ 
    doCall(foo); 
} 

건배 & HTH,

+1

호기심에서 벗어난 이유는 함수에 대한 포인터 대신 함수에 대한 참조를 사용하려는 이유는 무엇입니까? – fredoverflow

+10

@FredOverflow : 포인터가 null이거나 유효하지 않을 수 있기 때문에. 참조가 유효하고 널 (NULL 참조가 없음)이 아니거나 프로그램에 오류가 있음을 보장합니다. –

+4

@Alf P. Steinbach : "프로그램에 오류가 있습니다."이론적으로는 좋지만 sometype 및 ref = * ptr과 같은 것이 있으면 포인터의 주소가 단순히 주소로 복사됩니다 참조에서 유효하지 않거나 null 일 수 있습니다. 위의 문장은'ptr'이 유효하지 않거나 null 일 때 정의되지 않은 행동이라고 말할 수 있습니다 만, 컴파일이나 실행시에는이 사실을 알 수 없으므로 프로그래머가 확신 할 수 있도록해야합니다 그것은 포인터를 사용하는 것과 같고 유효하고 널이 아닙니다. 그래서 나는 프로그래머에게 아무런 차이가 없다고 말한다. – newacct