static virtual als Memberfunktion



  • Ich weiß, dass ein static virtual für den Compiler keinen Sinn machen kann.
    Allerdings könnte folgendes Szenario für den Programmierer eintreten:
    Man möchte eine Klasse erstellen, die eine static Memberfunktion beherbergt (also eine FUnktion die keine Objektabhängigkeit besitzt). Wenn man nun diese Klasse ableitet und diese Funktion überlädt, würde nun statt der überladenen Variante immer die Basisvariante aufgerufen werden. Kann man das irgendwie umgehen?



  • dgrat__ schrieb:

    Wenn man nun diese Klasse ableitet und diese Funktion überlädt, würde nun statt der überladenen Variante immer die Basisvariante aufgerufen werden. Kann man das irgendwie umgehen?

    Was genau willst du umgehen? Du rufst explizit die Methode der Basisklasse auf, was sollte also auch anderes passieren!?



  • dgrat__ schrieb:

    Kann man das irgendwie umgehen?

    Klar, deklariere die Funktion als virtual 💡



  • Naja ich finde mich eben damit ab, dass es nicht geht.



  • Es geht nicht, weil es keinen Sinn macht. Wenn du uns erklärst, wieso genau du meintest das tun zu wollen, dann können wir dir vielleicht eine bessere Lösung vorschlagen...



  • Wenn du Klassen als first-class Klassen haben willst, dann musst du z.B. Python verwenden, da geht so etwas (nennt sich classmethod).



  • Wenn ich das richtig verstanden habe, wird die Funktion doch sowieso in einer Memberfunktion oder zumindest über ein Objekt aufgerufen? Dann spar dir das static einfach und mach sie virtual.
    Gehört zwar nicht mehr zur Frage, aber habt ihr euch auch schonmal virtual static member Variablen gewünscht? Man könnte das zwar einfach durch eine normale virtual function lösen, aber ich stelle mir vor dass der Zugriff auf eine Variable über einen direkten pointer im vtable schneller geht, als ein Aufruf einer virtual function, die dann doch wieder einen Pointer zurückgibt.



  • Das würde schon Sinn ergeben. Wenn man innherlab einer Klasse die static Methode einer abstrakten Klasse aufruft und sich nachher wünscht, dass die passende (überladene) Methode des aktuellen Objekts aufgerufen wird.
    Natürlich kann man auf static verzichten, aber falls nunmal keine abhängigkeiten zu einem Objekt an sich existieren wäre es auch schön wenn man ein static anhängen kann uns so von mehrfachvererbung und objektunabhängigkeit profitiert.



  • Klingt an sich konfus, wenn man zwar eine objektabh. methode aufrufen will aber keine abhängigkeit zu einem objekt hat (bsp. ausgabefunktion).
    Aber dieser Umstand würde doch ein neues schlüsselwort für c++ nahelegen.



  • dgrat__ schrieb:

    Das würde schon Sinn ergeben. Wenn man innherlab einer Klasse die static Methode einer abstrakten Klasse aufruft und sich nachher wünscht, dass die passende (überladene) Methode des aktuellen Objekts aufgerufen wird.

    Das geht ganz einfach, indem du die Methode die die static Methode aufruft virtual machst und dann in der abgeleiteten Klasse überschreibst.

    dgrat__ schrieb:

    Klingt an sich konfus, wenn man zwar eine objektabh. methode aufrufen will aber keine abhängigkeit zu einem objekt hat (bsp. ausgabefunktion).

    Was genau meinst du damit!?



  • dgrat__ schrieb:

    Wenn man innherlab einer Klasse die static Methode einer abstrakten Klasse aufruft und sich nachher wünscht, dass die passende (überladene) Methode des aktuellen Objekts aufgerufen wird.

    Warum rufst du nicht gleich die static Methode der Klasse des aktuellen Objektes auf? Vielleicht brauchen wir etwas Code, um dich richtig zu verstehen. Und zwar kein verkümmertes Beispiel sondern etwas, was uns dein eigentliches Problem deutlich macht.


Anmelden zum Antworten