首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定boost::signals2的类成员函数

绑定boost::signals2的类成员函数
EN

Stack Overflow用户
提问于 2013-07-23 20:15:43
回答 1查看 2.1K关注 0票数 1

我使用std::bind创建了一个包含类成员函数的lambda,但是boost::signals2不接受它。

我有一个Cut类,当有新的Event需要查看时,我想通过调用void Cut::newEvent(Event& e)来通知它。

我创建了一个到Cut实例的lambda绑定,当我向它传递一个事件时,它就像预期的那样工作。(代码编译后,输出为"Registered new event“。)

但是,当我尝试将这个lambda连接到boost::signals2::signal<void(Event&)>的一个实例时,它会报错并显示以下消息:

error: 'f' cannot be used as a function

这很奇怪,因为我可以将它用作main()中的函数。(如果我使用std::function<void(Event&)>而不是auto,我会得到同样的结果。

有没有可能做到这一点?为什么它现在不能工作?

相关代码如下:

代码语言:javascript
复制
#include <iostream>
#include <boost/signals2.hpp>

//Dummy event class
struct Event
{ int val; };

typedef boost::signals2::signal<void (Event&) >
EventBroadcaster;

//Class I want to notified of new events
class Cut
{
    public:
        void newEvent( Event& e)
        {
            std::cout << "Registered new event" << std::endl;
            fResult = true;
        }

        bool check() const
        { return fResult; }

    private:
        bool fResult;
};

int main()
{

    Cut c{};

    //Lambda to call newEvent on c
    auto f =
        std::bind( &Cut::newEvent, &c,
                std::placeholders::_1) ;

    Event e{};
    f(e); //works

    EventBroadcaster eb;
    eb.connect(&f); //doesn't work
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 20:20:52

你应该使用

代码语言:javascript
复制
eb.connect(f);

因为f是可调用的函数对象,但&f是不可调用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17809957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档