[C++] Abgeleitete Klassen zu statischer Funktion zwingen
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
[C++] Abgeleitete Klassen zu statischer Funktion zwingen
Hi,
Wie kann ich eine Schnittstelle entwerfen, deren Ableitungen eine statische Funktion je selber implementieren müssen? Also quasi eine abstrakte statische Funktion, die sich nicht überschreiben lässt?
Dass diese Funktion dann nur mit Kenntnis des endgültigen Typs abgerufen werden und nicht überschrieben werden kann ist gut so; dass der Compiler das Fehlen der Funktion bereits zur Kompilierzeit feststellen können wird ist mir auch klar. Es geht mir nur darum, die Einheitlichkeit bei allen Implementierungen der Schnittstelle zu wahren.
Gruß, Ky
Wie kann ich eine Schnittstelle entwerfen, deren Ableitungen eine statische Funktion je selber implementieren müssen? Also quasi eine abstrakte statische Funktion, die sich nicht überschreiben lässt?
Dass diese Funktion dann nur mit Kenntnis des endgültigen Typs abgerufen werden und nicht überschrieben werden kann ist gut so; dass der Compiler das Fehlen der Funktion bereits zur Kompilierzeit feststellen können wird ist mir auch klar. Es geht mir nur darum, die Einheitlichkeit bei allen Implementierungen der Schnittstelle zu wahren.
Gruß, Ky
-
- Establishment
- Beiträge: 191
- Registriert: 01.03.2009, 19:22
- Echter Name: David N.
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
Ad hoc würde ich sagen: Gar nicht, schon deswegen nicht, weil du keine Möglichkeit hast, in der Basisklasse an den konkreten Typ der abgeleiteten Klasse heranzukommen, um die statische Methode aufzurufen – außer du greifst auf CRTP zurück…
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
Den konkreten Typ muss ich garnicht kennen; alle Zugriffe auf die statischen Funktionen geschehen von außerhalb. Aber mir wird auch gerade klar, dass das, was ich hier fordere, im Grunde nur ein Concept ist, das eine Gruppe von Klassen zwecks generischer Programmierung zur Implementierung einer nichtvirtuellen Funktion zwingen soll und damit so ziemlich unmöglich sein sollte. Verdammt.
-
- Establishment
- Beiträge: 191
- Registriert: 01.03.2009, 19:22
- Echter Name: David N.
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
Meine Antwort hat sich übrigens darauf bezogen, dass du, um mit der statischen Funktion innerhalb der Basisklasse auch nur irgendwas machen zu können (etwa überprüfen, ob sie mit einem Satz Dummy-Parameter aufrufbar ist), ja den Typ der abgeleiteten Klasse kennen müsstest, was eben ohne CRTP o.ä. nicht realisieren lässt.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
Darauf ist auch das „den konkreten Typ muss ich garnicht kennen“ meiner Antwort bezogen, und dass mir das egal ist, stand schon per „Dass diese Funktion dann nur mit Kenntnis des endgültigen Typs abgerufen werden […] kann ist gut so“ in meiner Frage ;) Wie gesagt – ich möchte nur die Implementierungen einheitlich halten; ich muss nicht von der Basisklasse aus mit den Funktionen arbeiten.
- Sternmull
- Establishment
- Beiträge: 264
- Registriert: 27.04.2007, 00:30
- Echter Name: Til
- Wohnort: Dresden
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
In der ATL wird dieses Problem gelöst indem die Basisklasse einen Templateparameter bekommt dem der abgeleitete Typ zugewiesen wird. Dadurch kann die Basisklasse auf den vollständigen Typ zugreifen. D.h. sie kann dann auch statische Memberfunktionen aufrufen die nur in der Abgeleiteten Klasse existieren. Das ist bestimmt auch irgend ein Design-Pattern.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
Das große Problem ist, dass man die Basisklasse dann nicht mehr zur Generalisierung einsetzen kann – was auch immer vorher eine Referenz zur Basisklasse erwartet hatte, erwartet nun ein vollständig typisiertes Template. Polymorphie zwecks Generalisierung ist dann also unmöglich.
- Aramis
- Moderator
- Beiträge: 1458
- Registriert: 25.02.2009, 19:50
- Echter Name: Alexander Gessler
- Wohnort: 2016
- Kontaktdaten:
Re: [C++] Abgeleitete Klassen zu statischer Funktion zwingen
CRTP - Curiously Recurring Template Pattern.In der ATL wird dieses Problem gelöst indem die Basisklasse einen Templateparameter bekommt dem der abgeleitete Typ zugewiesen wird. Dadurch kann die Basisklasse auf den vollständigen Typ zugreifen. D.h. sie kann dann auch statische Memberfunktionen aufrufen die nur in der Abgeleiteten Klasse existieren. Das ist bestimmt auch irgend ein Design-Pattern.