Нужно, чтобы этот Functor работал до тех пор, пока мой поток работает, поэтому я создал shared_ptr и попытался передать его в std :: thread , Здесь я скопировал код и список ошибок.Передача std :: shared_ptr объекту функции в std :: thread
struct Functor
{
std::string greeting;
explicit Functor(std::string _greeting="Hello!"): greeting { _greeting } {}
void operator()()
{
std::cout << greeting << "\n";
}
};
auto main() ->int
{
std::shared_ptr<Functor> fp = std::make_shared<Functor>();
std::thread t(&fp);
t.join();
return 0;
}
Список ошибок:
Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)' std_threads C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr\xthread 240
Error C2672 'std::invoke': no matching overloaded function found std_threads C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\thr\xthread 240
Я новичок в C++ 11 и параллелизм. Пожалуйста, помогите мне разобраться в следующем.
1> Выполняет ли std :: thread всегда оператор operator() внутри объекта при передаче по значению? Если да, то почему это было определено так.
2> как обеспечить, чтобы ресурс, заданный потоку, оставался до тех пор, пока поток работает?
3> is Functor здесь, объект функции?
4> Что я здесь сделал в этом коде?!
не должно это быть 'станд :: нить т (* FP) 'вместо этого? – vu1p3n0x