Ich versuche, Kompilierungszeit-Polymorphismus mit CRTP zu implementieren, und möchte die abgeleitete Klasse die Funktion implementieren implementieren.Emuliert reine virtuelle Funktion in statischen Polymorphie mit CRTP möglich?
Die aktuelle Implementierung ist so.
template <class Derived>
struct base {
void f() {
static_cast<Derived*>(this)->f();
}
};
struct derived : base<derived>
{
void f() {
...
}
};
In dieser Implementierung aufrufen, um die Funktion in eine Endlosschleife fällt, wenn die abgeleitete Klasse nicht f()
geführt hat.
Wie erzwinge ich die abgeleitete Klasse, um die Funktion wie reine virtuelle Funktion zu implementieren? Ich habe versucht, 'static_assert' wie static_assert(&base::f != &Derived::f, "...")
zu verwenden, aber es erzeugt eine Fehlermeldung, die besagt, dass zwei Mitgliedsfunktionszeiger, die auf die Mitgliedsfunktionen der verschiedenen Klassen zeigen, nicht vergleichbar sind.
Werfen Sie einen Blick auf 'ctype :: scan_is' und' ctype :: do_scan_is'. – Mehrdad