0

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

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

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

我不确定实现预期结果的正确代码。问题似乎在于取消引用指针以获取要传递给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());
4

1 回答 1

2

您应该使用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;
}
于 2013-05-13T15:44:03.673 回答