C ++定义一个与lambda闭包一起使用的函数

托莫夫

我在找出lambda函数定义时遇到问题。所以我有这段代码,它可以正常工作:

auto fnClickHandler = [](Button *button) -> void
{
    cout << "click" << endl;
};
button->setEventHandler(MOUSEBUTTONUP, fnClickHandler);

但是我需要在fnClickHandler内使用闭包,所以我执行以下代码:

int someParam = 1;

auto fnClickHandler = [someParam](Button *button) -> void
{
    cout << "click" << someParam << endl;
};
button->setEventHandler(MOUSEBUTTONUP, fnClickHandler);

现在,我得到以下编译错误:

no matching function for call to ‘Button::setEventHandler(BUTTON_EVENT_HANDLERS, nameOfFunctionWhichHostsThisCode::__lambda0&)’|

这是Button :: setEventHandler函数的定义方式:

void setEventHandler(int, void (*handler)(Button *));

我想我需要更改该定义以支持lambda闭包参数(可选),但是到目前为止,我失败了。你能帮我解决吗?

谢谢!

普拉丹

可以将无捕获的lambda隐式转换为具有相同签名的函数指针。这就是为什么您的代码可以使用没有捕获版本的的原因fnClickHandler捕获lambda后,有两种选择:

  1. 创建一个功能模板,让编译器为您推断类型

    template <typename Handler>
    void setEventHandler(int, Handler handler);//You can use either enable_if or static_assert to restrict the types of Handler.
    
  2. 使用std::function

    void setEventHandler(int, std::function<void(Button *)>);
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++ Lambda/闭包混淆 - 如何返回一个值,而不是一个闭包

来自分类Dev

我们可以在C中与变量一起声明一个函数吗?

来自分类Dev

C ++定义适用于lambda闭包的函数

来自分类Dev

在C中将常规函数与内联函数一起使用

来自分类Dev

如何定义与结构数组C一起使用的宏

来自分类Dev

在C中将bsearch()函数与结构数组一起使用

来自分类Dev

C中的分段错误,与char *函数一起使用

来自分类Dev

在C中将函数指针与void一起使用

来自分类Dev

C / C ++:使用类型定义的函数指针来*声明*一个函数

来自分类Dev

从函数返回的C ++类型的lambda闭包

来自分类Dev

如何将Rust与wasm-bindgen一起使用,以创建一个带有状态的另一个闭包的闭包?

来自分类Dev

将C#ConcurrentBag <T>与多个生产者和一个消费者一起使用

来自分类Dev

我正在尝试创建一个使用C ++中的参数包构造函数的异常类

来自分类Dev

在C中另一个函数的输入中定义一个函数

来自分类Dev

在没有Lambda函数的C ++中使用另一个向量对向量排序

来自分类Dev

如何使用一个定义或函数使用C打印任何变量类型?

来自分类Dev

如果我在c中声明一个接受变量/数组地址的函数,则该函数仅应在传递地址时起作用。为什么它也可以与常量一起使用?

来自分类Dev

使用C#和Xamarin表单-如何在不设置闭包链的情况下关闭一个模式

来自分类Dev

如何创建一个函数可以使用自定义的可比 C++?

来自分类Dev

在C中与atoi()一起使用

来自分类Dev

在另一个函数中使用C函数

来自分类Dev

将new与使用C malloc的C ++构造函数一起使用

来自分类Dev

C ++如何使用从一个函数到另一个函数的变量?

来自分类Dev

如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

来自分类Dev

C ++ 11:std :: bind与Lambda一起崩溃

来自分类Dev

将C ++ 11 lambda与boost :: multi_index一起使用

来自分类Dev

如何将 lambda 与 C# 中的方法一起使用?

来自分类Dev

如何定义一个与移动语义和复制语义一起使用的函数?

来自分类Dev

在 mysql 中创建一个与 GROUP BY 一起使用的用户定义函数

Related 相关文章

  1. 1

    C++ Lambda/闭包混淆 - 如何返回一个值,而不是一个闭包

  2. 2

    我们可以在C中与变量一起声明一个函数吗?

  3. 3

    C ++定义适用于lambda闭包的函数

  4. 4

    在C中将常规函数与内联函数一起使用

  5. 5

    如何定义与结构数组C一起使用的宏

  6. 6

    在C中将bsearch()函数与结构数组一起使用

  7. 7

    C中的分段错误,与char *函数一起使用

  8. 8

    在C中将函数指针与void一起使用

  9. 9

    C / C ++:使用类型定义的函数指针来*声明*一个函数

  10. 10

    从函数返回的C ++类型的lambda闭包

  11. 11

    如何将Rust与wasm-bindgen一起使用,以创建一个带有状态的另一个闭包的闭包?

  12. 12

    将C#ConcurrentBag <T>与多个生产者和一个消费者一起使用

  13. 13

    我正在尝试创建一个使用C ++中的参数包构造函数的异常类

  14. 14

    在C中另一个函数的输入中定义一个函数

  15. 15

    在没有Lambda函数的C ++中使用另一个向量对向量排序

  16. 16

    如何使用一个定义或函数使用C打印任何变量类型?

  17. 17

    如果我在c中声明一个接受变量/数组地址的函数,则该函数仅应在传递地址时起作用。为什么它也可以与常量一起使用?

  18. 18

    使用C#和Xamarin表单-如何在不设置闭包链的情况下关闭一个模式

  19. 19

    如何创建一个函数可以使用自定义的可比 C++?

  20. 20

    在C中与atoi()一起使用

  21. 21

    在另一个函数中使用C函数

  22. 22

    将new与使用C malloc的C ++构造函数一起使用

  23. 23

    C ++如何使用从一个函数到另一个函数的变量?

  24. 24

    如何创建一个C ++宏来定义使用调用另一个函数的参数列表的函数?

  25. 25

    C ++ 11:std :: bind与Lambda一起崩溃

  26. 26

    将C ++ 11 lambda与boost :: multi_index一起使用

  27. 27

    如何将 lambda 与 C# 中的方法一起使用?

  28. 28

    如何定义一个与移动语义和复制语义一起使用的函数?

  29. 29

    在 mysql 中创建一个与 GROUP BY 一起使用的用户定义函数

热门标签

归档