线程未能取消回调函数

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>