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