Рассмотрим следующий код:Создание экземпляра shared_ptr <std::thread> с make_shared <std::thread>
class A
{
....
shared_ptr<std::thread> mThread;
void Step();
void LaunchTrhead();
}
void A::LaunchThread()
{
...
mThread=make_shared<std::thread>(Step); // This line gives an error
...
}
void A::Step()
{
...
}
Я пытаюсь инициализировать общий указатель mThread так, что она вызывает функцию Шаг. Однако компилятор дает мне ошибку «неверная инициализация ссылки типа ... из выражения типа« неразрешенный перегруженный тип функции »». Очевидно, я делаю что-то глупое, но я не могу на него наложить. Может ли кто-нибудь помочь? Заранее спасибо!
На месте! Компилятор рассказывал мне («неразрешенная функция»), но я просто не мог этого видеть, я был полностью ослеп (я должен пойти домой ...). Кроме того, в соответствии с тем, что вы указали, я могу объявить * Test * static. Но ваше решение более практично в моем случае, поскольку оно позволяет избежать указания указателя на объект владельца. Спасибо! – DrD
Вы можете передать указатель на элемент и указатель на объект непосредственно в конструктор 'std :: thread' (и' std :: bind' и 'std :: async'):' mThread = std :: make_shared (& A :: Step, this); ' –
Casey
@Casey Не знал этого, спасибо! – Praetorian