#include <iostream> #include <functional> using namespace std; int sum41(int x,int y); int multiply42(int x,int y); int passFuncAddress43(int x,int y,int(*func)(int ,int)); void callFuncAddress44(int x,int y); int main(int args, char **argv) { callFuncAddress44(atoi(argv[1]), atoi(argv[2])); } void callFuncAddress44(int x,int y) { cout<<"Sum of x and y is "<<passFuncAddress43(x,y,&sum41)<<endl; cout<<"Prod of x and y is "<<passFuncAddress43(x,y,&multiply42)<<endl; } int passFuncAddress43(int x,int y,int(*func)(int ,int)) { return func(x,y); } int multiply42(int x,int y) { cout<<"In int multiply42(int x,int y)"<<endl; return x*y; } int sum41(int x,int y) { cout<<"In int sum41(int x,int y)"<<endl; return x+y; }
Compile the above code via g++,and run as below
./h1 10000 10000
Please pay more attention to below function declaration and definition via passing function address.
//Pass function via address *, include return type,function address and parameter types int passFuncAddress43(int x,int y,int(*func)(int ,int)) { return func(x,y); }
When we invoke above function which we will pass arguments at first orderly and at last pass function address via & symbol
void callFuncAddress44(int x,int y) { cout<<"Sum of x and y is "<<passFuncAddress43(x,y,&sum41)<<endl; cout<<"Prod of x and y is "<<passFuncAddress43(x,y,&multiply42)<<endl; }