C++ 将具有多个参数的函数作为参数传递
我想调用一个具有多个参数的函数作为另一个函数的参数。赋值要求将计数值(恰好是从类型integer read_Events函数返回的相同值)作为另一个函数的参数传递。虽然我可以调用函数并存储并传递它,但我认为将整个函数作为参数传递可能会更简洁一些 这是上节课的一个项目,我正在为学习目的修改它。到目前为止,我尝试将函数2的地址存储到指针中,并将存储函数2地址的指针作为函数1的参数传递。我还尝试将整个函数2传递给函数1的参数C++ 将具有多个参数的函数作为参数传递,c++,c++11,callback,function-pointers,C++,C++11,Callback,Function Pointers,我想调用一个具有多个参数的函数作为另一个函数的参数。赋值要求将计数值(恰好是从类型integer read_Events函数返回的相同值)作为另一个函数的参数传递。虽然我可以调用函数并存储并传递它,但我认为将整个函数作为参数传递可能会更简洁一些 这是上节课的一个项目,我正在为学习目的修改它。到目前为止,我尝试将函数2的地址存储到指针中,并将存储函数2地址的指针作为函数1的参数传递。我还尝试将整个函数2传递给函数1的参数 #include<iostream> #include<c
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
struct Date {
int month;
int day;
int year;
};
struct Time {
int hour;
int minute;
};
struct Event {
char desc[80];
Date date;
Time time;
};
int read_Events(Event* Eptr[50], int MAX);
void display(Event* Eptr[50],int(*read_events)(Event , int )) //1. can i
do this?;
int main() {
Event* Eptr[50];
int *Fptr = &read_Events;//#2 Is this possible? (function address
to pass as arugement in display function)
_getch();
return 0;
}
int read_Events(Event* Eptr[50], int MAX) {
bool repeat = true;
char ans;
char slash;
char colon;
int i = 0;
while (repeat && i < MAX) {
cout << "\nWould you like to add a new event [y/n]? ";
cin >> ans;
if (ans == 'Y' || 'y') {
Eptr[i] = new Event;
repeat = true;
cout << "\nEnter description: ";
cin.clear();
cin.ignore(256, '\n');
cin.getline(Eptr[i]->desc, sizeof(Eptr[i]->desc));
cout << "\nEnter Date(MM/DD/YYYY): ";
cin >> Eptr[i]->date.month >> slash >> Eptr[i]->date.day >>
slash >> Eptr[i]->date.year;
cout << "\nEnter time(HH:MM): ";
cin >> Eptr[i]->time.hour >> colon >> Eptr[i]->time.minute;
}
else {
repeat = false;
return i;
}
i++;
}
return i; //returning number of events
}
It seems as if what I have done so far is not syntactically correct.
#包括
#包括
#包括
使用名称空间std;
结构日期{
整月;
国际日;
国际年;
};
结构时间{
整小时;
整数分钟;
};
结构事件{
char desc[80];
日期;
时间;
};
int read_事件(事件*Eptr[50],int MAX);
无效显示(Event*Eptr[50],int(*read_events)(Event,int))//1。我可以吗
这样做?;
int main(){
事件*Eptr[50];
int*Fptr=&read_Events;//#2这可能吗?(函数地址)
在显示功能中作为附件传递)
_getch();
返回0;
}
int read_事件(事件*Eptr[50],int MAX){
布尔重复=真;
查尔安斯;
字符斜杠;
半结肠;
int i=0;
while(重复(&i<最大值){
cout>ans;
if(ans==“Y”| |“Y”){
Eptr[i]=新事件;
重复=正确;
cout desc,sizeof(Eptr[i]>desc));
cout>Eptr[i]->date.month>>斜杠>>Eptr[i]->date.day>>
斜杠>>Eptr[i]->date.year;
cout>Eptr[i]>time.hour>>colon>>Eptr[i]>time.min;
}
否则{
重复=错误;
返回i;
}
i++;
}
return i;//返回事件数
}
似乎到目前为止我所做的在语法上是不正确的。
是的,你可以。确保声明正确终止
void display(Event* Eptr[50],int(*read_events)(Event , int ));
这是不对的<代码>&读取事件计算为指向函数的指针。你需要
int(*Fptr)(Event , int ) = &read_Events;
您也可以使用更简单的版本
int(*Fptr)(Event , int ) = read_Events;
您还可以使用编译器的能力来推断类型并使用
auto Fptr = &read_Events;
话虽如此,我不清楚你打算如何使用函数指针。在您发布的代码中没有对
display()
的调用。也许现在是签出std::function
和lambda
int(*Fptr)(Event , int ) = read_Events;
auto Fptr = &read_Events;