Chcę zaimplementować konstruktory przenoszenia (bez konstruktora kopiowania) dla określonego typu, który musi być typem wartości w boost::unordered_map
. Nazwijmy ten typ Composite
.Przenoszenie konstruktora i listy inicjowania
Composite
ma następujący podpis:
struct Base
{
Base(..stuff, no default ctor) : initialization list {}
Base(Base&& other) : initialization list {}
}
struct Composite
{
Base member;
Composite(..stuff, no default ctor) : member(...) {}
Composite(Composite&& other) : member(other.member) {} // <---- I want to make sure this invokes the move ctor of Base
}
chcę napisać to tak boost::unordered_map< Key , Composite >
nie wymaga konstruktor kopiujący i po prostu używa konstruktora ruch. Jeśli to możliwe, nie chcę używać konstruktora kopiowania z Base
na liście inicjalizacyjnej konstruktora przenoszenia Composite
.
Czy to możliwe?
+1 za dobre wykorzystanie względnie nowego terminu * odwołanie uniwersalne *. – mavam
@MatthiasVallentin: Ten termin został wymyślony na miejscu przez Scotta Meyersa. Komitet normalizacyjny preferuje obecnie termin "referencje spedycyjne". –
Jesteśmy teraz prawie dwa lata, ciesząc się, że społeczność osiągnęła stabilny okres. – mavam