ještě k deferred_future
pokud napíšu
co_await foo()
tak pokud foo() je korutina nebo generátor, tak samotné zavolání funkce přepnutí nezpůsobí. Přepnutí způsobí až co_await, ten tedy vyžaduje aby foo() vrátila awaiter. tady právě deferred_future je ten awaiter který teprve v co_await zahájí operaci a dojde k přepnutí.
pokud by foo vracela pouze future, pak co_await nemůže nic přepínat, protože z jeho pohledu už výpočet běží. Takže pouze zaregistruje korutinu k probuzení na výsledku a vrátí řízení o level výš. z hlediska efektivity je lepší, když dvě korutiny se přepínaji na deferred_future než na future
abych zachoval určitý level abstrakce, tak i samotna future umi deferred režim a jak jsem psal v článku, smyslem deferred_future je hlavně zlepšení čitelnosti a umožnění move toho objektu, tedy pohodlnější zacházení (protože tam je move možný), pokud volaný 100 procent ví, že tam bude vždy korutina, muze tuhle informaci tímto způsobem předat volajícímu a tím mu rozvázát ruce,
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 51 063×
Přečteno 23 939×
Přečteno 22 871×
Přečteno 20 952×
Přečteno 17 760×