这里有三个函数,分别是:
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”,下面是该函数的写法。
void Replace()
{
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ Plus);//// (1)
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ &Minus);//// (2)
}
为什么上述函数能够正常工作,因为 "Function_Pointer_func" 函数将函数指针作为参数传递。如果我们替换第 line 中的 RHS
float result = pt2Func(a, b); // call using function pointer
将函数“Function_Pointer_func”中的(*pt2Func)(a, b)替换为(pt2Func)(a, b),同样也可以工作,但对于(&pt2Func)(a, b)会出现VS2008错误:
"error C2064:项不会评估为接受2个参数的函数"
现在,在函数“Function_Pointer_func”的“float (*pt2Func)(float, float)”参数中替换为“float (pt2Func)(float, float)”,然后三个都可以正常工作。
float result = pt2Func(a, b); //
float result = (&pt2Func)(a, b); //
float result = (*pt2Func)(a, b); //
函数指针是什么?为什么会起作用?我希望我的疑惑源于对函数指针核心理解的不足。虽然我已经进行了一些阅读,但我还没有进行深入的研究,所以请随意推荐相关的阅读材料来澄清我的疑虑。
提前感谢您的帮助。
std::plus<float>
,不需要编写自己的。 - MSalters