|
|
Member functions | ||||
packaged_task::packaged_task | ||||
Getting the result | ||||
Execution | ||||
Non-member functions | ||||
Helper classes | ||||
(until C++17) | ||||
Deduction guides(C++17) |
packaged_task()noexcept; | (1) | (since C++11) |
template<class F> explicit packaged_task( F&& f); | (2) | (since C++11) |
template<class F,class Allocator> explicit packaged_task(std::allocator_arg_t,const Allocator& a, F&& f); | (3) | (since C++11) (until C++17) |
packaged_task(const packaged_task&)= delete; | (4) | (since C++11) |
packaged_task( packaged_task&& rhs)noexcept; | (5) | (since C++11) |
Constructs a newstd::packaged_task
object.
std::packaged_task
object with no task and no shared state.std::packaged_task
object with a stored task of typestd::decay<F>::type and a shared state. The stored task is initialized withstd::forward<F>(f).These overloads participate in overload resolution only ifstd::decay<F>::type is not the same type asstd::packaged_task<R(Args...)>. Lett1,t2, ...,tN be values of the corresponding types in | (until C++20) |
This overload participates in overload resolution only ifstd::remove_cvref_t<F> is not the same type asstd::packaged_task<R(Args...)>. Ifstd::is_invocable_r_v<R,std::decay_t<F>&, Args...> isfalse, the program is ill-formed. | (since C++20) |
std::packaged_task
is move-only.std::packaged_task
with the shared state and task formerly owned byrhs, leavingrhs with no shared state and a moved-from task.Contents |
f | - | the callable target to execute |
a | - | the allocator to use when storing the task |
rhs | - | thestd::packaged_task to move from |
allocate
function if memory allocation fails.#include <future>#include <iostream>#include <thread> int fib(int n){if(n<3)return1;elsereturn fib(n-1)+ fib(n-2);} int main(){std::packaged_task<int(int)> fib_task(&fib); std::cout<<"Starting task\n";auto result= fib_task.get_future();std::thread t(std::move(fib_task),42); std::cout<<"Waiting for task to finish..."<<std::endl;std::cout<< result.get()<<'\n'; std::cout<<"Task complete\n"; t.join();}
Output:
Starting taskWaiting for task to finish...267914296Task complete
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2067 | C++11 | the parameter type of the copy constructor waspackaged_task& | addedconst |
LWG 2097 | C++11 | for overloads(2,3),F could bestd::packaged_task<R(Args...)> | F is constrained |
LWG 4154 | C++11 | overloads(2,3) did not consider decaying | consider decaying |