0
我有一个名为Candidate
的类,其中包含一个名为DataUpdate()
的函数。我打算动态地创建Candidate的许多实例,并让每个实例将其功能DataUpdate()
作为插槽连接到boost.signals2
信号;准备好接收信号。使用boost.signals2如何将动态分配的对象连接到信号
我在下面开发是给错误的代码:
Error 2 error C2276: '&' : illegal operation on bound member function expression
我不能确定正确的代码,以达到预期的效果。问题似乎在于解引用指针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());
所以我尝试使用你建议的格式,但这一行; signal.connect(std :: bind(std :: mem_fn(&Candidate :: DataUpdate),candidateInstance.get()));给出错误;错误C2064:术语不计算带有6个参数的函数。有关如何解决它的任何想法?谢谢。 @soon – GoFaster 2013-05-13 16:38:50
看起来你的函数比我的答案中表示的函数更多的参数。在这种情况下,您应该使用[占位符](http://en.cppreference.com/w/cpp/utility/functional/placeholders)。 – soon 2013-05-13 16:44:46
'bind'不需要'mem_fn'并且可以绑定到'shared_ptr':'bind(&Foo :: foo,foo_ptr);' – 2013-05-13 17:48:20