线程未能取消回调函数
thread failed to dedact callback function
我有以下功能:
template <class T>
void programManager(std::shared_ptr<BaseStrategy<T>> st,std::shared_ptr<SMDSSubscriber<T>> md){some code}
它是 std::thread
的可调用函数
bac 声明为:
std::shared_ptr<BaseStrategy<EZXOrderEventHandler>> bac = make_shared<BacStrategy<EZXOrderEventHandler>>
和 md 声明为:
std::shared_ptr<SMDSSubscriber<EZXOrderEventHandler>> dataMarket = make_shared<SMDSSubscriber<EZXOrderEventHandler>>();
std::thread t2(&programManager,bac,dataMarket);
我收到错误:
error: no matching function for call to ‘std::thread::thread(, std::shared_ptr >&, std::shared_ptr >&)’
std::thread t2(&programManager,bac,dataMarket);
note: candidate: template std::thread::thread(_Callable&&, _Args&& ...)
thread(_Callable&& __f, _Args&&... __args)
template argument deduction/substitution failed:
/home/yaodav/Desktop/git_repo/test/main.cpp:347:54: note: couldn't deduce template parameter ‘_Callable’
std::thread t2(&programManager,bac,dataMarket);
std::thread::thread
需要一个 可调用对象 作为其第一个参数。 programManager
本身不是一个可调用对象,它是一个函数 模板 ,它基本上只是一个通用的说明,说明如何生成它的实例。
在你的情况下,你需要传递一个对应的programManager
的实例作为参数,这似乎是programManager<EZXOrderEventHandler>
。
我有以下功能:
template <class T>
void programManager(std::shared_ptr<BaseStrategy<T>> st,std::shared_ptr<SMDSSubscriber<T>> md){some code}
它是 std::thread
的可调用函数bac 声明为:
std::shared_ptr<BaseStrategy<EZXOrderEventHandler>> bac = make_shared<BacStrategy<EZXOrderEventHandler>>
和 md 声明为:
std::shared_ptr<SMDSSubscriber<EZXOrderEventHandler>> dataMarket = make_shared<SMDSSubscriber<EZXOrderEventHandler>>();
std::thread t2(&programManager,bac,dataMarket);
我收到错误:
error: no matching function for call to ‘std::thread::thread(, std::shared_ptr >&, std::shared_ptr >&)’ std::thread t2(&programManager,bac,dataMarket);
note: candidate: template std::thread::thread(_Callable&&, _Args&& ...) thread(_Callable&& __f, _Args&&... __args)
template argument deduction/substitution failed:
/home/yaodav/Desktop/git_repo/test/main.cpp:347:54: note: couldn't deduce template parameter ‘_Callable’
std::thread t2(&programManager,bac,dataMarket);
std::thread::thread
需要一个 可调用对象 作为其第一个参数。 programManager
本身不是一个可调用对象,它是一个函数 模板 ,它基本上只是一个通用的说明,说明如何生成它的实例。
在你的情况下,你需要传递一个对应的programManager
的实例作为参数,这似乎是programManager<EZXOrderEventHandler>
。