Voglio implementare i costruttori di movimento (nessun costruttore di copia) per un certo tipo che deve essere un tipo di valore in un boost::unordered_map
. Chiamiamo questo tipo Composite
.Spostamento costruttore e lista di inizializzazione
Composite
ha la seguente firma:
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
}
voglio scrivere questo in modo boost::unordered_map< Key , Composite >
non richiede il costruttore di copia, e utilizza solo il costruttore mossa. Se possibile, non voglio utilizzare il costruttore di copie di Base
nell'elenco di inizializzazione del costruttore di spostamenti di Composite
.
È possibile?
+1 per un buon uso del termine relativamente nuovo * riferimento universale *. – mavam
@MatthiasVallentin: questo termine è stato ideato sul posto da Scott Meyers. Il comitato standard preferisce il termine "riferimento di inoltro" al giorno d'oggi. –
Siamo quasi due anni in ora, lieti di vedere che la comunità è convergere su un termine stabile. – mavam