Wie können Klassen mit `std::variant`-Mitgliedern sicher kopiert werden?

Wie können Klassen mit `std::variant`-Mitgliedern sicher kopiert werden?

cpreference hat dies über std::variant zu sagen Kopierkonstruktor von :

Mit anderen Worten, es ist nicht gelöscht, es sei denn, einer oder mehrere der Typen, die std::variant enthalten kann, ist aus welchem ​​Grund auch immer nicht kopierbar. In Ihrem Fall ist es die std::unique_ptr das verursacht das Problem. Vielleicht std::shared_ptr wäre besser geeignet.


Erweiterung der Antwort von Paul Sanders:Welche Art von Kopie möchten Sie?

Wenn es sich um eine flache Kopie handelt, verwenden Sie shared_ptr<A> .

Wenn es sich um eine tiefe Kopie handelt, warum nicht variant<..,A> ? Wenn der Grund dafür ist, dass A polymorph ist, besteht das eigentliche Problem darin, jede der abgeleiteten Klassen zu klonen. Sie müssen Ihren eigenen Mechanismus für das Klonen und Ihren eigenen kopierbaren intelligenten Zeiger erstellen, um ihn zu verwenden - soweit ich weiß, gibt es in der Standardbibliothek nichts, was Ihnen helfen könnte.