使用boost.如何将动态分配的对象连接到信号

Using boost.signals2 how do I connect dynamically allocated objects to a signal

本文关键字:对象连接 信号 动态分配 boost 使用      更新时间:2023-10-16

我有一个名为Candidate的类,其中包含一个名为DataUpdate()的函数。我打算动态地创建候选的许多实例,并使每个实例将其功能DataUpdate()作为插槽连接到boost.signals2信号;准备好接收信号。

我在下面开发的代码给出了错误:

错误2:'&':绑定成员函数表达式的非法操作

我不确定实现预期结果的正确代码。问题似乎在于对指针candidateInstance进行解引用,以获取实例的DataUpdate()函数的地址以传递给signal.connect()。有人能告诉我正确的方法吗?

Candidate *candidateInstance;
//INSTANTIATE CANDIDATE INSTANCE
++DataStream::ID;//increment static variable
candidatesVector.push_back(candidateInstance = new Candidate(ID));
//CONNECT DATAUPDATE() OF CANDIDATE INSTANCE
signal.connect( &((*candidateInstance).DataUpdate) );
//FIRE SIGNAL
signal(BarNumber(), DateTime(), Open(), High(), Low(), Close());

应该使用bind来创建成员函数的包装器。

#include <iostream>
#include <memory>
#include <functional>
#include <boost/signals2.hpp>
class Foo
{
public:
    void foo()
    {
        std::cout << "I'm foo() from Foo, this == " << this << std::endl;
    }
};
int main()
{
    auto foo_ptr = std::make_shared<Foo>();
    boost::signals2::signal<void()> sig;
    sig.connect(std::bind(&Foo::foo, foo_ptr));
    sig();
    return 0;
}