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 57 593×
Přečteno 27 718×
Přečteno 26 401×
Přečteno 24 367×
Přečteno 22 862×