Передача shared_ptr в качестве аргумента функции потока приводит к ошибке - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь сделать что-то подобное, как показано ниже:

std::shared_ptr<asengine::PreCompileConfig> precompileconfigobj = std::make_shared<asengine::PreCompileConfig>();

std::thread rsync_t(&asengine::PreCompile::RunRsyncDb, precompileconfigobj));

Я получаю следующую ошибку:

/usr/include/c++/4.8/functional:1697:61: error: no type named 'type' in 'class std::result_of<std::_Mem_fn<void (asengine::PreCompile::*)(const std::shared_ptr<asengine::PreCompileConfig>&)>(std::reference_wrapper<std::shared_ptr<asengine::PreCompileConfig> >)>'
   typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                         ^
/usr/include/c++/4.8/functional:1727:9: error: no type named 'type' in 'class std::result_of<std::_Mem_fn<void (asengine::PreCompile::*)(const std::shared_ptr<asengine::PreCompileConfig>&)>(std::reference_wrapper<std::shared_ptr<asengine::PreCompileConfig> >)>'
     _M_invoke(_Index_tuple<_Indices...>)

После недолгого исследования я мог бы выяснить, что функция потока ожидает ссылкуобъекта аргумента вместо значения.

std::thread rsync_t(&asengine::PreCompile::RunRsyncDb, std::ref(precompileconfigobj));

Но, тем не менее, это не решает проблему. Буду признателен за любую помощь, чтобы выяснить проблему.

1 Ответ

0 голосов
/ 06 октября 2019

Я думаю, что решил проблему. Мне пришлось передать объект, через который будет вызываться функция потока.

std::thread rsync_t(&asengine::PreCompile::RunRsyncDb, precompileobj, std::ref(precompileconfigobj));
...