回调:函数指针作为参数并传递一个附加参数
Callback: function pointer as argument and passing an aditional agrument
如何将函数指针作为带参数的参数传递?
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' 不是函数或函数指针
name
是 ptr2
类型声明的一部分,而不是 D
. 中的变量
- Tou 正在尝试调用从
D
返回的内容,即 void
。 ,
在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
你应该让D
接受两个参数,一个是函数指针,一个是传递给函数指针的参数。例如
void D(void (*ptr2)(string), const string& name){
ptr2(name);
}
然后像这样称呼它
D(q, "John Doe");
如何将函数指针作为带参数的参数传递?
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' 不是函数或函数指针
name
是ptr2
类型声明的一部分,而不是D
. 中的变量
- Tou 正在尝试调用从
D
返回的内容,即void
。,
在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
你应该让D
接受两个参数,一个是函数指针,一个是传递给函数指针的参数。例如
void D(void (*ptr2)(string), const string& name){
ptr2(name);
}
然后像这样称呼它
D(q, "John Doe");