我有一个名为Candidate
的类,其中包含一个名为DataUpdate()
的函数。我打算动态创建许多Candidate实例,让每个实例将它的函数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());
答案 0 :(得分: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;
}