Der von Ihnen bereitgestellte Codeausschnitt implementiert das Merkmal is_base_of in C, das prüft, ob eine Klasse von einer anderen erbt. Es verwendet eine Technik namens „Curiously Recurring Template Pattern“ (CRTP).
Host ist eine Vorlagenklasse, die die abgeleitete Klasse umschließt und eine Möglichkeit bietet, auf ihren Operator B* zuzugreifen. Funktion. Wenn wir prüfen möchten, ob B die Basisklasse von D ist, rufen wir is_base_of::value auf.
Die Prüffunktion überlädt zwei Funktionen:
Der Operator B* muss sein const, da sonst die Auswahl der aufzurufenden Prüffunktion unklar wäre. Mit dem Schlüsselwort const weiß der Compiler, dass er die Prüffunktion verwenden muss, die B* const& akzeptiert.
Die erste Prüffunktion ist besser, weil sie einen Benutzer verwendet -definierte Konvertierungssequenz, die von D* nach B* konvertiert. Dies ist spezifischer als die zweite Prüffunktion, die eine benutzerdefinierte Konvertierungssequenz verwendet, die von B* in int konvertiert.
Das obige ist der detaillierte Inhalt vonWie funktioniert diese C-is_base_of-Implementierung mit CRTP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!