Вот три функции, такие как: -Как передать функцию-указатель на функцию в 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» функция написана ниже
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» принимает функцию-указатель, как ар gument. А если заменить RHS в строке
float result = pt2Func(a, b); // call using function pointer
из функции "Function_Pointer_func" по формуле (* pt2Func) (а, б), то и он работает, но для (& pt2Func) (а, б);
он дает ошибку в VS2008:
"ошибка C2064: термин не вычисляется функция принимает 2 аргумента"
Теперь замените в аргументе «поплавка (* pt2Func) (с плавающей точкой, с плавающей точкой)»в функции "Function_Pointer_func" по поплавку (pt2Func) (с плавающей точкой, с плавающей точкой), то все три
float result = pt2Func(a, b); //
float result = (&pt2Func)(a, b); //
float result = (*pt2Func)(a, b); //
заявления работает, почему? Надеюсь, причина моего дискомфорта заключается в понимании основного понимания функции-указателя. Ну, я не представляю Q? без какого-либо хорошего чтения, но да, я не проводил никаких интенсивных исследований по этому поводу, поэтому, пожалуйста, не стесняйтесь рекомендовать некоторые чтения в этом отношении, которые разобрали бы мою двусмысленность.
Спасибо за помощь заранее.
Там уже вполне хороший 'станд :: плюс', нет необходимости писать свой собственный. –
MSalters
благодарит @RiaD за указание на то, что причиной работы всех трех типов может быть ошибка/функция msvc. Он поднимает ветер сомнения, но я увижу то же самое с другим компилятором. – zeal