在文件
test.hpp
中,我正在定义具有 3 个方法的 Test 类。
我还将回调类型定义为返回 bool
并接受 char
和 int
参数的函数。
#include <iostream>
// Defining function that takes char, int and return bool.
typedef bool (*Callback)(char, unsigned int);
using namespace std;
class Test{
public:
void methodOne(Callback f);
void methodTwo(Callback f);
void methodThree(Callback f);
};
test.cpp
包含方法的实现:
#include "test.hpp"
void Test::methodOne(Callback f){
f('A', 1);
}
void Test::methodTwo(Callback f){
f('B', 2);
}
void Test::methodThree(Callback f){
f('C', 3);
}
在
main()
中,如果 lambda 函数没有捕获 []
中的任何参数,我可以传递它。
int main(){
Test obj;
int var = 100;
auto lambda = [/* var */](char c, unsigned i)->bool{
cout << c << " " << i << endl;
return true;
};
obj.methodOne(lambda);
obj.methodTwo(lambda);
obj.methodThree(lambda);
return 0;
}
如何声明三个方法来接受可以捕获变量
var
的回调lambda函数? test.hpp
处的声明和 test.cpp
处的定义所有 3 个方法的语法是什么?
我尝试了这个,但没有编译:
auto lambda = [var](char c, unsigned i)->bool{
cout << c << " " << i << endl;
return true;
};
重复的链接没有回答问题。我的问题不是如何使用函数指针通过捕获接受 lambda。我的问题是我想替换函数指针定义
Callback
,这样我就可以将捕获的 lambda 传递给它。