微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

回调:将函数指针作为参数并传递附加的参数

如何解决回调:将函数指针作为参数并传递附加的参数

如何将函数指针作为带有参数的参数传递?

void A(){
    std::cout << "hello" << endl;
}

void B(void (*ptr)()){ // function pointer as agrument
    ptr(); // call back function "ptr" points.
}

void C(string name){
    std::cout << "hello" << name << endl;
}

void D(void (*ptr2)(string name)){ // function pointer as agrument
    ptr2(name); // error 1
}

int main(){
    void (*p)() = A; // all good
    B(p); // is callback // all good

    void (*q)(string name) = C;
    D(q)("John Doe"); // error 2
    return 0;
};

错误
1-使用未声明的标识符'name'
2-称为“ void”的对象类型不是函数函数指针

解决方法

您应该使D带有两个参数,一个参数用于函数指针,一个参数用于传递给函数指针的参数。例如

void D(void (*ptr2)(string),const string& name){
    ptr2(name);
}

然后称呼它

D(q,"John Doe");
,
  1. nameptr2类型声明的一部分,不是D中的变量。
  2. 您正在尝试调用Dvoid返回的内容。 ,用于在C ++中分隔参数。

尝试一下:

#include <iostream>
#include <string>
using std::endl;
using std::string;

void A(){
    std::cout << "hello" << endl;
}

void B(void (*ptr)()){ // function pointer as agrument
    ptr(); // call back function "ptr" points.
}

void C(string name){
    std::cout << "hello" << name << endl;
}

void D(void (*ptr2)(string name),string name){ // function pointer and a string as agrument
    ptr2(name);
}

int main(){
    void (*p)() = A; // all good
    B(p); // is callback // all good

    void (*q)(string name) = C;
    D(q,"John Doe"); // pass 2 arguments
    return 0;
} // you don't need ; here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。