【问题标题】:thread failed to dedact callback function线程无法删除回调函数
【发布时间】:2020-02-13 05:41:12
【问题描述】:

我有以下功能:

    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);

我得到了错误:

错误:没有匹配函数调用‘std::thread::thread(, std::shared_ptr >&, std::shared_ptr >&)’ std::thread t2(&programManager,bac,dataMarket);

注意:候选:模板 std::thread::thread(_Callable&&, _Args&& ...) 线程(_Callable&& __f, _Args&&... __args)

模板参数推导/替换失败:

/home/yaodav/Desktop/git_repo/test/main.cpp:347:54:注意:无法推断模板参数'_Callable'

     std::thread t2(&programManager,bac,dataMarket);

【问题讨论】:

  • std::thread t2(programManager&lt;EZXOrderEventHandler&gt;,bac,dataMarket); 工作吗?
  • 解决问题谢谢

标签: c++ templates stdthread


【解决方案1】:

std::thread::thread 需要一个可调用对象作为它的第一个参数。 programManager 本身不是一个可调用对象,它是一个函数模板,它基本上只是一个通用的规定,应该如何生成它的实例。

在您的情况下,您需要将programManager 的相应实例 作为参数传递,这似乎是programManager&lt;EZXOrderEventHandler&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多