C++ 将具有多个参数的函数作为参数传递

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

我想调用一个具有多个参数的函数作为另一个函数的参数。赋值要求将计数值(恰好是从类型integer read_Events函数返回的相同值)作为另一个函数的参数传递。虽然我可以调用函数并存储并传递它,但我认为将整个函数作为参数传递可能会更简洁一些

这是上节课的一个项目,我正在为学习目的修改它。到目前为止,我尝试将函数2的地址存储到指针中,并将存储函数2地址的指针作为函数1的参数传递。我还尝试将整个函数2传递给函数1的参数

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