传递带有多个参数的函数作为参数

时间:2019-05-28 02:20:50

标签: c++ c++11 callback function-pointers

我想调用一个带有多个参数的函数作为另一个函数的参数。该赋值要求传递计数值(恰好恰好与从整数类型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.

1 个答案:

答案 0 :(得分:0)

void display(Event* Eptr[50],int(*read_events)(Event , int )) //1. can i  do this?;

是的,可以。确保声明正确终止。

void display(Event* Eptr[50],int(*read_events)(Event , int ));
int *Fptr = &read_Events;//#2 Is this possible? 

那是不正确的。 &read_Events的值等于指向函数的指针。您需要

int(*Fptr)(Event , int ) = &read_Events;

您也可以使用更简单的版本。

int(*Fptr)(Event , int ) = read_Events;

您还可以使用编译器的功能来推断类型并使用

auto Fptr = &read_Events;

话虽如此,但我不清楚您打算如何使用功能指针。您发布的代码中没有呼叫display()