같은 세 가지 기능을 인 -함수 포인터를 C++ 함수에 전달하는 방법은 무엇입니까? 여기
float Plus (float a, float b) { return a+b; }
float Minus (float a, float b) { return a-b; }
float Multiply(float a, float b) { return a*b; }
지금 인자 중 하나로서 기능 포인터를 얻어 함수가 -
void Function_Pointer_func(float a, float b, float (*pt2Func)(float, float))
{
float result = pt2Func(a, b); // call using function pointer
cout << " Result = "; // display result
cout << result << endl;
}
및 상기 함수 "Function_Pointer_func"를 호출은 함수는 함수 위에 수행하는 기능 "Function_Pointer_func"로 잘 작동 AR로 함수 포인터를 취 왜
void Replace()
{
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ Plus);//// (1)
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ &Minus);//// (2)
}
아래 작성 기념물. 그리고 우리는 (A, B) (* pt2Func)에 의해 라인 기능 "Function_Pointer_func"의
float result = pt2Func(a, b); // call using function pointer
에 우를 대체 할 경우, 다음 또한 작동하지만 (& pt2Func)에 대한 (A, B);
는 VS2008의 오류를 제공:
"오류 C2064 : 용어는 2 개 인자 복용 함수에 평가하지 않습니다"이제 부동 "의 인수에 교체
을 (* pt2Func) (부동, 플로트) 플로트에 의해 Function_Pointer_func ""기능에서 "(pt2Func) (부동, 플로트) 다음 세 가지
float result = pt2Func(a, b); //
float result = (&pt2Func)(a, b); //
float result = (*pt2Func)(a, b); //
문 작품, 왜? 필자는 불편한 점이 function-pointer에 대한 핵심 이해를 이해하기를 바란다. 음, 나는 Q를 제시하지 않습니까? 어떤 양의 독서도없이 그렇습니다. 그렇습니다. 이에 대한 집중적 인 연구를하지 않았으니,이 점에 관해서는 다소 모호합니다.
미리 도움을 주셔서 감사합니다.
완벽하게 좋은'표준 : 플러스 ', 자신을 쓸 필요가 이미 있습니다. –
MSalters
세 가지 유형 모두를 작동하는 이유를 지적하기 위해 @RiaD가 msvc의 버그/기능 일 수 있습니다. 의심의 여지는 없지만 다른 컴파일러와 똑같이 보일 것입니다. – zeal