Ich möchte Move-Konstruktoren (kein Kopierkonstruktor) für einen bestimmten Typ implementieren, der ein Werttyp in einem boost::unordered_map
sein muss. Nennen wir diesen Typ Composite
.Move-Konstruktor und Initialisierungsliste
Composite
hat die folgende Signatur:
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
}
Ich möchte dies schreiben, so boost::unordered_map< Key , Composite >
nicht den Kopierkonstruktor benötigt und verwendet nur den Umzug Konstruktor. Wenn möglich, möchte ich nicht den Kopierkonstruktor Base
in der Initialisierungsliste des Move-Konstruktors von Composite
verwenden.
Ist das möglich?
+1 für eine gute Verwendung der relativ neuen Begriff * Universalreferenz *. – mavam
@MatthiasVallentin: Dieser Begriff wurde auf der Stelle von Scott Meyers erfunden. Der Normenausschuss bevorzugt heutzutage den Begriff "Forwarding Reference". –
Wir sind jetzt fast zwei Jahre alt, froh zu sehen, dass sich die Gemeinschaft auf einen stabilen Begriff eingelassen hat. – mavam