gpt4 book ai didi

c++ - 线程未能取消回调函数

转载 作者:行者123 更新时间:2023-11-28 04:07:44 25 4
gpt4 key购买 nike

我有以下功能:

    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> .

关于c++ - 线程未能取消回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com