I am trying to construct a std::thread
with a member function that takes no arguments and returns void
. I can't figure out any syntax that works – the compiler complains no matter what. What is the correct way to implement spawn()
so that it returns a std::thread
that executes test()
?
#include <thread>
class blub {
void test() {
}
public:
std::thread spawn() {
return { test };
}
};
Best Answer
EDIT: Accounting your edit, you have to do it like this:
UPDATE: I want to explain some more points, some of them have also been discussed in the comments.
The syntax described above is defined in terms of the INVOKE definition (ยง20.8.2.1):
Another general fact which I want to point out is that by default the thread constructor will copy all arguments passed to it. The reason for this is that the arguments may need to outlive the calling thread, copying the arguments guarantees that. Instead, if you want to really pass a reference, you can use a
std::reference_wrapper
created bystd::ref
.By doing this, you are promising that you will take care of guaranteeing that the arguments will still exist when the thread operates on them.
Note that all the things mentioned above can also be applied to
std::async
andstd::bind
.