1. 程式人生 > 其它 >C++ pass function and arguments as parameter via function address * symbol

C++ pass function and arguments as parameter via function address * symbol

#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;
}