Ich habe eine feste Anzahl von Objekten der Klasse T, die nicht kopierbar und nicht standardkonstruierbar sind. Da die Größe fest ist, möchte ich einen Array-ish Container wie std::array
anstelle von unique_ptr
oder vector
verwenden. Ich möchte die zusätzliche indirekte Ebene vermeiden, wenn ich ihr helfen kann.Wie initialisiert man ein std :: array <T, 2> wobei T nicht kopierbar und nicht standardkonstruierbar ist?
Wie initialisiere ich eine std::array<T, 2>
? Die Verwendung von array<T, 2> {T(...), T(...)}
führt zu einem Fehler beim Konstruktor für gelöschte Kopien. Die Verwendung von array<T, 2> {move(T(...)), move(T(...))}
erzwingt nicht, dass die Array-Elemente den Move-Konstruktor verwenden. Wenn std::array<T, 2>
von Natur aus nicht funktioniert, was kann ich sonst noch tun, ohne auf eine zusätzliche Schicht von indirekten oder manuellen Speicherverwaltungstechniken wie Placement-Neu zurückgreifen zu müssen?
mir Klingt wie alle Instanzen von T nur über intelligente Zeiger zugegriffen werden. 'std :: array' von unique/shared ptrs zu T, etc ... –
@SamVarshavchik, Aber Sie können' std :: vector' mit move-only, nicht-standard-konstruierbaren Typen einfach in Ordnung. – chris
Was ich erreichen möchte, kann im Prinzip erreicht werden, wenn auch mit chaotischen und schwer zu lesenden Techniken wie der Platzierung neuer. Ich weiß, dass ein Vektor einfach wäre, aber er gibt mir den zusätzlichen Overhead, den ich habe, um zu vermeiden, dass das In-Prinzip völlig vermeidbar ist. – Syncopated