std::function我需要将带有捕获的 lambda 传递给函数,但由于性能缓慢,我试图避免使用,并且我正在制作一个性能关键的应用程序。我也不想使用模板,因为返回类型和参数是特定的,但如果这是唯一的方法,我可以使用模板。
我已经尝试过 ChatGPT 的答案,但没有成功:
void my_func(void (*callback)(int, int, int))
{
callback(1, 2, 3);
}
int main()
{
int x = 10;
my_func([&](int a, int b, int c)
{
std::cout << "Example, a + b + c + x: " << a + b + c + x << std::endl;
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误说:
不存在从“lambda [](int a, int b, int c)->void”到“void (*)(int, int, int)”的合适转换函数
您可以将 lambda 作为函数指针传递 - 但前提是不涉及捕获。
这有效:
void my_func(void (*callback)(int, int, int)) {
callback(1, 2, 3);
}
int main() {
my_func([](int a, int b, int c) {
int x = 10;
std::cout << "Example, a + b + c + x: " << a + b + c + x << std::endl;
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
x上面的例子中也可以声明为全局的。
int x;
int main()
{
x = 10;
my_func([](int a, int b, int c) {
std::cout << "Example, a + b + c + x: " << a + b + c + x << std::endl;
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |