gpt4 book ai didi

c++ - 为 boost::signals2 绑定(bind)类成员函数

转载 作者:行者123 更新时间:2023-11-28 07:30:38 26 4
gpt4 key购买 nike

我已经使用 std::bind 创建了一个涉及类成员函数的 lambda,但 boost::signals2 不接受它。

我有一个类Cut我想在有新的 Event 时通知您打电话看void Cut::newEvent(Event& e) .

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

然而,当我尝试将此 lambda 连接到 boost::signals2::signal<void(Event&)> 的实例时它提示消息:

error: 'f' cannot be used as a function

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

有可能使这项工作吗?为什么它目前不起作用?

这是相关代码:

#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
}

最佳答案

你应该使用

eb.connect(f);

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

关于c++ - 为 boost::signals2 绑定(bind)类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com