Heim > Backend-Entwicklung > C++ > Hauptteil

So erstellen Sie Kopien abgeleiteter Klasseninstanzen aus polymorphen Basisklassenzeigern: Eine Lösung mit virtuellen Klonmethoden und CRTP

Patricia Arquette
Freigeben: 2024-10-27 23:11:29
Original
840 Leute haben es durchsucht

How to Create Copies of Derived Class Instances from Polymorphic Base Class Pointers: A Solution Using Virtual Clone Methods and CRTP

Abgeleitete Klasseninstanzen von polymorphen Basisklassenzeigern kopieren

Für viele hat sich dieses Programmierrätsel als schwer zu fassen erwiesen. Lassen Sie uns die Komplexität untersuchen und eine effiziente Lösung finden.

Stellen Sie sich das folgende Szenario vor: Sie haben die Klassen Base, Derived1, Derived2 usw., wobei abgeleitete Klassen von Base erben. Bei einem Zeiger auf ein Basisobjekt besteht das Ziel darin, eine dynamisch zugewiesene Kopie des zugrunde liegenden abgeleiteten Objekts zu erstellen und so Probleme wie die „Absenderadresse eines temporären Objekts“ zu vermeiden.

Traditionell wurde dies durch eine Litanei gelöst von Typ-IDs oder Dynamic_casts in bedingten Anweisungen. Wir suchen jedoch nach einer eleganteren Lösung.

Virtuelle Klonmethode

Der Schlüssel liegt in der Einführung einer virtuellen clone()-Methode in die Basisklasse, die für jedes Abgeleitete implementiert wird Typ. Diese Methode gibt eine Kopie des Objekts zurück. Wenn Base nicht abstrakt ist, können Sie seinen Kopierkonstruktor aufrufen, aber dieser Ansatz birgt das Risiko von Slicing, wenn er in den abgeleiteten Klassen nicht ordnungsgemäß implementiert wird.

CRTP-Idiom für die Wiederverwendung von Code

Um Codeduplizierung zu vermeiden, kann das CRTP-Idiom (Curiously Recurring Template Pattern) verwendet werden. Betrachten Sie die folgende generische Vorlage:

template <class Derived>
class DerivationHelper : public Base
{
public:
  virtual Base* clone() const
  {
    return new Derived(static_cast<const Derived&>(*this));
  }
};
Nach dem Login kopieren

Durch die Verwendung dieser Vorlage können mehrere abgeleitete Klassen von DerivationHelper erben und die clone()-Methode mithilfe ihrer jeweiligen Kopierkonstruktoren implementieren.

Implementierung und Vorteile

Diese Lösung bietet mehrere Vorteile:

  • Einfachheit: Der Code ist prägnant und einfach zu implementieren.
  • Erweiterbarkeit: Das Hinzufügen neuer abgeleiteter Klassen ist möglich Es ist keine Änderung der Basisklasse erforderlich.
  • Leistung: Virtuelle Funktionsaufrufe sind relativ effizient.

Durch die Verwendung der virtuellen clone()-Methode und des CRTP-Idioms können Programmierer effektiv das Gewünschte erreichen Funktionalität ohne die Notwendigkeit komplizierter oder fehleranfälliger Ansätze.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie Kopien abgeleiteter Klasseninstanzen aus polymorphen Basisklassenzeigern: Eine Lösung mit virtuellen Klonmethoden und CRTP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!