std:: noop_coroutine
              
  | 
             
              
  | 
            |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Coroutine traits | ||||
| 
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| Coroutine handle | ||||
| 
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| No-op coroutines | ||||
| 
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| 
               
                
                 
                  
                   noop_coroutine
                  
                 
                
                
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| Trivial awaitables | ||||
| 
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| 
               
                
                 
                  
                   (C++20)
                  
                 
                
                
               | 
            ||||
| Range generators | ||||
| 
               
                
                 
                  
                   (C++23)
                  
                 
                
                
               | 
            
| 
           
           Défini dans l'en-tête
            
         
            
             <coroutine>
            
           
           | 
         ||
| 
           
           
            
             
              std::
              
               noop_coroutine_handle
              
             
            
            noop_coroutine
            
             (
            
            
             )
            
            
             noexcept
            
            
             ;
            
           
           
          | 
         (depuis C++20) | |
Retourne un gestionnaire de coroutine faisant référence à une coroutine sans opération.
       S'il existe déjà un état de coroutine de coroutine sans opération, il n'est pas spécifié si un appel ultérieur à
       
        noop_coroutine
       
       retourne un gestionnaire de coroutine précédemment obtenu, ou un gestionnaire de coroutine se référant à un nouvel état de coroutine de coroutine sans opération.
      
         Table des matières | 
       
Paramètres
(aucun)
Valeur de retour
Un std::noop_coroutine_handle faisant référence à une coroutine sans opération.
Notes
       Les valeurs de retour d'appels différents à
       
        noop_coroutine
       
       peuvent ou peuvent ne pas être égales en comparaison.
      
       
        noop_coroutine
       
       ne peut retourner qu'un
       
        noop_coroutine_handle
       
       se référant à un objet d'état de coroutine sans démarrer une coroutine.
      
Exemple
#include <coroutine> #include <iostream> #include <utility> template<class T> struct task { struct promise_type { auto get_return_object() { return task(std::coroutine_handle<promise_type>::from_promise(*this)); } std::suspend_always initial_suspend() { return {}; } struct final_awaiter { bool await_ready() noexcept { return false; } void await_resume() noexcept {} std::coroutine_handle<> await_suspend(std::coroutine_handle<promise_type> h) noexcept { // final_awaiter::await_suspend est appelé lorsque l'exécution du // la coroutine actuelle (désignée par 'h') est sur le point de se terminer. // Si la coroutine actuelle a été reprise par une autre coroutine via // co_await get_task(), un handle vers cette coroutine a été stocké // comme h.promise().previous. Dans ce cas, retourne le handle pour reprendre // la coroutine précédente. // Sinon, retourne noop_coroutine(), dont la reprise ne fait rien. if (auto previous = h.promise().précédent; previous) return previous; else return std::noop_coroutine(); } }; final_awaiter final_suspend() noexcept { return {}; } void unhandled_exception() { throw; } void return_value(T value) { result = std::move(value); } T result; std::coroutine_handle<> previous; }; task(std::coroutine_handle<promise_type> h) : coro(h) {} task(task&& t) = delete; ~task() { coro.destroy(); } struct awaiter { bool await_ready() { return false; } T await_resume() { return std::move(coro.promise().result); } auto await_suspend(std::coroutine_handle<> h) { coro.promise().précédent = h; return coro; } std::coroutine_handle<promise_type> coro; }; awaiter operator co_await() { return awaiter{coro}; } T operator()() { coro.reprendre(); return std::move(coro.promise().result); } private: std::coroutine_handle<promise_type> coro; }; task<int> get_random() { std::cout << "in get_random()\n"; co_return 4; } task<int> test() { task<int> v = get_random(); task<int> u = get_random(); std::cout << "dans test()\n"; int x = (co_await v + co_await u); co_return x; } int main() { task<int> t = test(); int result = t(); std::cout << result << '\n'; }
Sortie :
dans test() dans get_random() dans get_random() 8
Voir aussi
| 
          
           
            
             
              (C++20)
             
            
           
           
          | 
        
         utilisé pour les coroutines sans effets observables
          (classe)  | 
       
| 
          
           
            
             
              (C++20)
             
            
           
           
          | 
        
         
          
           
            
             std::
             
              coroutine_handle
             
            
           
           
            <
           
           
            
             std::
             
              noop_coroutine_promise
             
            
           
           
            >
           
          
         
         , destiné à référencer une coroutine sans opération
          (typedef)  |