Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::packaged_task<R(Args...)>::packaged_task

      From cppreference.com
      <cpp‎ |thread‎ |packaged task
       
       
      Concurrency support library
      Threads
      (C++11)
      (C++20)
      this_thread namespace
      (C++11)
      (C++11)
      (C++11)
      Cooperative cancellation
      Mutual exclusion
      Generic lock management
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      Condition variables
      (C++11)
      Semaphores
      Latches and Barriers
      (C++20)
      (C++20)
      Futures
      (C++11)
      (C++11)
      (C++11)
      Safe reclamation
      Hazard pointers
      Atomic types
      (C++11)
      (C++20)
      Initialization of atomic types
      (C++11)(deprecated in C++20)
      (C++11)(deprecated in C++20)
      Memory ordering
      (C++11)(deprecated in C++26)
      Free functions for atomic operations
      Free functions for atomic flags
       
       
      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.

      1) Constructs astd::packaged_task object with no task and no shared state.
      2,3) Constructs astd::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 inArgs, ifINVOKE<R>(f, t1, t2, ..., tN) is not a valid expression, the program is ill-formed.

      (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)
      3) The allocatora is used to allocate memory necessary to store the task.
      4) The copy constructor is deleted,std::packaged_task is move-only.
      5) Constructs astd::packaged_task with the shared state and task formerly owned byrhs, leavingrhs with no shared state and a moved-from task.

      Contents

      [edit]Parameters

      f - the callable target to execute
      a - the allocator to use when storing the task
      rhs - thestd::packaged_task to move from

      [edit]Exceptions

      2) Any exceptions thrown by copy/move constructor off and possiblystd::bad_alloc if the allocation fails.
      3) Any exceptions thrown by copy/move constructor off and by the allocator'sallocate function if memory allocation fails.

      [edit]Example

      Run this code
      #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

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2067C++11the parameter type of the copy constructor waspackaged_task&addedconst
      LWG 2097C++11for overloads(2,3),F could bestd::packaged_task<R(Args...)>F is constrained
      LWG 4154C++11overloads(2,3) did not consider decayingconsider decaying
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/packaged_task/packaged_task&oldid=180415"

      [8]ページ先頭

      ©2009-2025 Movatter.jp