使用C ++ Lambda指向成员函数的指针

之后24

我试图找到一种方法来提供指向不同类实例之间的成员函数的指针。目前,我能够提供指向不带参数的成员函数的指针,但是当指向的函数具有参数时,就无法做到这一点。

示例代码来说明我的问题:

#include <iostream>

class Event
{
public:
    std::string type;
    Event(std::string type):type(type){}
};

class EventDispatcherBase
{
public:

    void addEventListener(std::function<void(Event &event)> listener)
    {
        Event myEvent("Type of the myEvent object");
        listener(myEvent);
    }
};

class EventDispatcherClass:public EventDispatcherBase
{
public:
    EventDispatcherClass()
    {
        addEventListener([](Event &event){std::cout << event.type << std::endl;});
        //addEventListener([this]{listener(Event event);});
    };

    void listener(Event &event)
    {
        std::cout << event.type << std::endl;
    }
};

int main()
{
    EventDispatcherClass eventDispatcherClass;

    return 0;
}

此代码与匿名lambda表达式一起使用,并在控制台中输出“ myEvent对象的类型”。但是如果我取消注释

addEventListener([this]{listener(Event event);});

为了传递指向void listener(Event &event)成员函数的指针,在EventDispatcherClass的构造函数中,编译器抛出以下错误:

没有从'((... / main.cpp:27:26)处的lambda)转换为'std :: function'的可行转换

我不明白为什么。

无用

工作线:

addEventListener([](Event &event){std::cout << event.type << std::endl;});

看起来不像是坏掉的那个:

//addEventListener([this]{listener(Event event);});

因此,请先一点一点地更改工作线。

  1. 添加您想要的捕获表达式,它仍然有效

    addEventListener([this](Event &event){std::cout << event.type << std::endl;});
    
  2. 将身体更改为所需的身体,它仍然有效

    addEventListener([this](Event &event){ this->listener(event); });
    

如果您无法看到的是两个版本之间的不同-这实际上是当你自己写了他们和你看到的很常见你打算键入,而不是那里的东西-尝试改变布局,样样在行了(所以你会看到缺少的(Event &event)),或按上述步骤逐步将其转换为另一种,或仅将另一种替换为另一种并比较文件版本。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指向成员函数的C ++指针出错:不是函数或函数指针

来自分类Dev

指向类成员的 C++ 函数指针

来自分类Dev

指向非静态成员函数的C ++指针

来自分类Dev

C ++,模板或指向成员函数的指针

来自分类Dev

使用指向成员函数的指针的问题

来自分类Dev

指向成员函数的C ++指针而不是函数指针

来自分类Dev

使用指向成员的指针将成员函数作为参数传递

来自分类Dev

c++ - 如何在静态成员函数中使用指向成员函数的指针

来自分类Dev

C++ Primer 第 5 版:指向成员函数的指针

来自分类Dev

跨C ++模块传递指向成员函数的指针

来自分类Dev

C ++:如何返回指向非静态成员函数的指针?

来自分类Dev

C ++:如何重载函数,使其可以使用任何函子,包括指向成员函数的指针?

来自分类Dev

指向C ++中成员的指针

来自分类Dev

C ++如何获取指向lambda函数的void指针?

来自分类Dev

使用 C++11 将指向成员函数的指针作为参数传递

来自分类Dev

C ++外部函数,带有指向函数作为参数的指针,在带有成员函数的类内部使用

来自分类Dev

成员函数指针c ++

来自分类Dev

使用指向成员函数的指针来确定调用哪个函数

来自分类Dev

如何使用指向友元函数的指针作为成员函数的参数

来自分类Dev

如何设置 (*sa_handler)(int) 指向作为类成员的函数的指针?(非静态成员函数的无效使用)

来自分类Dev

C ++在函数中使用指向结构的指针

来自分类Dev

指向函数成员的指针:R(* C :: *)(Args ...)是什么意思?

来自分类Dev

具有签名和类型指向成员函数指针的C ++模板

来自分类Dev

如何将指向非静态成员方法的指针移交给外部“C”函数?

来自分类Dev

为什么必须使用地址运算符获取指向成员函数的指针?

来自分类Dev

在派生类的对象上使用指向基类成员函数的指针

来自分类Dev

声明并使用指向另一个类中成员函数的指针

来自分类Dev

在编译时使用constexpr初始化指向成员函数的指针数组

来自分类Dev

指向指针的c ++指针和接收指向指针的调用函数

Related 相关文章

  1. 1

    指向成员函数的C ++指针出错:不是函数或函数指针

  2. 2

    指向类成员的 C++ 函数指针

  3. 3

    指向非静态成员函数的C ++指针

  4. 4

    C ++,模板或指向成员函数的指针

  5. 5

    使用指向成员函数的指针的问题

  6. 6

    指向成员函数的C ++指针而不是函数指针

  7. 7

    使用指向成员的指针将成员函数作为参数传递

  8. 8

    c++ - 如何在静态成员函数中使用指向成员函数的指针

  9. 9

    C++ Primer 第 5 版:指向成员函数的指针

  10. 10

    跨C ++模块传递指向成员函数的指针

  11. 11

    C ++:如何返回指向非静态成员函数的指针?

  12. 12

    C ++:如何重载函数,使其可以使用任何函子,包括指向成员函数的指针?

  13. 13

    指向C ++中成员的指针

  14. 14

    C ++如何获取指向lambda函数的void指针?

  15. 15

    使用 C++11 将指向成员函数的指针作为参数传递

  16. 16

    C ++外部函数,带有指向函数作为参数的指针,在带有成员函数的类内部使用

  17. 17

    成员函数指针c ++

  18. 18

    使用指向成员函数的指针来确定调用哪个函数

  19. 19

    如何使用指向友元函数的指针作为成员函数的参数

  20. 20

    如何设置 (*sa_handler)(int) 指向作为类成员的函数的指针?(非静态成员函数的无效使用)

  21. 21

    C ++在函数中使用指向结构的指针

  22. 22

    指向函数成员的指针:R(* C :: *)(Args ...)是什么意思?

  23. 23

    具有签名和类型指向成员函数指针的C ++模板

  24. 24

    如何将指向非静态成员方法的指针移交给外部“C”函数?

  25. 25

    为什么必须使用地址运算符获取指向成员函数的指针?

  26. 26

    在派生类的对象上使用指向基类成员函数的指针

  27. 27

    声明并使用指向另一个类中成员函数的指针

  28. 28

    在编译时使用constexpr初始化指向成员函数的指针数组

  29. 29

    指向指针的c ++指针和接收指向指针的调用函数

热门标签

归档