Template und statische Methode in virtueller Klasse
-
Guten Tag,
ich habe ein Template das von einer Klasse erwartet die statische Methode "T::foo()" bereitzustellen. Ich habe nun eine virtuelle Basisklasse die sowohl sich wiederholende Methoden, sowie eine Vorlage für die abgeleitete Klassen darstellen soll. Mit Vorlage ist dabei gemeint, das ich Benutzer der Basisklasse zwingen möchte eine statische Methode foo() in ihrer Abgeleiteten Klasse zu erstellen. Dies ist jedoch nicht möglich, statische virtuelle Methoden gibt es nicht, nichtmal wenn diese rein virtuell sind also keine Definition beinhalten. Meine Frage ist nun wie ich dieses offensichtliche Design Problem umschiffen kann. Oder ob es womöglich zuviel des "guten" ist den Nutzer mit einem Compiler Fehler und offensichtlichem Code zu zwingen und die Fehlermeldung vom Template vielleicht reicht?
-
Warum muss es den unbedingt eine statische Methode sein?
-
Die Template Klasse erzeugt keine Instanz der Basis/Abgeleiteten Klasse. Alle nötigen Informationen könnten über statische Methoden übergeben werden, da diese sich auch bei unterschiedlichen Instanzen nicht unterscheiden.
-
Wofür genau brauchst du diese statische Methode? Eine virtuelle statische Methode macht keinen Sinn, daher gibt es sowas natürlich nicht.
-
Es heißt Klassentemplate.
-
Ich interpretiere das mal so: Du willst also statische Methoden, weil diese sich für die einzelnen Instanzen nicht unterscheiden. Nichtstatische Methoden unterscheiden sich für die einzelnen Instanzen einer Klasse auch nicht, werden also in allen Instanzen gleichermaßen ausgeführt (das ist ja auch irgendwo der Sinn dahinter). Die Unterschiede sind ggf. in den Attribut- bzw. Übergabeparameterwerten zu finden.
Wenn Du also möchtest, dass eine Methode foo() in Unterklassen geschrieben werden sollen, ergo sich wahrscheinlich in foo() anders verhalten sollen, muss diese Methode in der Oberklasse 'pure virtual' deklariert sein.
Ich persönlich nutze statische Methoden selten und nur in Klassen, wenn diese Methoden nichts mit einem Objekt (einer Instanz) der Klasse und seinen Werten zu hat.
Ansonsten sagst Du, dass es von keiner Klasse Instanzen geben soll. Dann könnte ggf. das 'Singleton Class Pattern' für Dich interessant sein. Dann kannst Du mit virtuellen Methoden arbeiten und hast nur eine Instanz.
Ansonsten sind Deine Ausführungen etwas dünn, weil Du nicht genau ausführst, was Du willst.