поток не смог отключить функцию обратного вызова - PullRequest
0 голосов
/ 16 октября 2019

У меня есть следующая функция:

    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: note: не удалось вывести параметр шаблона '_Callable'

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

1 Ответ

1 голос
/ 16 октября 2019

std::thread::thread требует в качестве первого аргумента вызываемый объект . programManager сам по себе не является вызываемым объектом, это функция template , которая в основном является просто общим предписанием того, как должны генерироваться его экземпляры.

В вашем случае вам нужно передатьсоответствующий экземпляр из programManager в качестве аргумента, который выглядит как programManager<EZXOrderEventHandler>.

...