Pokud funguje RVO, tak se na to taky dívat tak, že dělá z čehokoliv co vrací daný typ konstruktor. Tím se vlastně všechny varianty funkce emplace stávají nedostatečný. Řešením by bylo doplnit funkce emplace další, kde by se předával tento "konstruktor". Většinou to ale není problém, protože prostě dojde k move.
Emplace je volání konstruktoru. Problém je, že co_return vrací jen jednu hodnotu.
emplace se píše jako
emplace(arg1,arg2,arg3...)
zatímco emplace(T(arg1,arg2,arg3...)) je automaticky move
stejně tak emplace(funkce()) je automaticky move
Určitým řešením by bylo co_return {arg1,arg2,arg3...} ale nebyl jsem schopen tuhle variantu jakkoliv zprovoznit.
takže zatím zbývá emplace(with_return_of([]{return T(arg1,arg2,arg3....);}))
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 50 233×
Přečteno 23 535×
Přečteno 22 525×
Přečteno 20 434×
Přečteno 17 495×