Gibt es static virtual functions?



  • Hallo zusammen,

    ich habe noch eine Frage... besteht irgendwie die Möglichkeit durch eine abstrakte Klasse einer konkretisierten Klasse (die von dieser erbt) eine static Funktion aufzuzwingen?

    virtual static BOOL Create() = 0;

    Geht leider nicht :(...



  • Nein, gibt es nicht - virtuelle Funktionen benötigen ein this-Objekt, über dessen vtable die richtige Version ermittelt werden kann, statische Methoden haben kein this-Objekt, sondern gelten für die gesamte Klasse.

    (aber bestimmt gibt es irgendwelche Coding-Tricks, mit denen du sowas über drei Verrenkungen und fünf Indirektionen simulieren kannst)



  • (aber bestimmt gibt es irgendwelche Coding-Tricks, mit denen du sowas über drei Verrenkungen und fünf Indirektionen simulieren kannst)

    Normalerweise reicht eine Indirektion, sprich eine virtuelle Funktion, die eine statische Funktion aufruft. Letztlich ist das Ganze aber von der konkreten Situation abhängig. Ohne zu wissen, was Meyer123 genau erreichen will, lässt sich also nicht sagen, wie man das am Besten anstellt 😉



  • .
    Blubb.
    Notiz an mich: vorher lesen, dann Posten.

    @OP: wie willst du diese aufgezwungene statische Methode denn dann aufrufen?



  • [quote="Meyer123"]Hallo zusammen,

    ich habe noch eine Frage... besteht irgendwie die Möglichkeit durch eine abstrakte Klasse einer konkretisierten Klasse (die von dieser erbt) eine static Funktion aufzuzwingen?

    virtual static BOOL Create() = 0;

    Geht leider nicht :(...[/quote]



  • Du könntest es so lösen:

    template< typename Derived >
    struct Base
    {
    
      static void create()
      {
         //code von Base::create hier
    
         //danach create von Derived aufrufen
         Derived::create();
      }
    };
    
    struct Derived1 : Base< Derived >
    {
      static void create()
      {
      }
    };
    

    So zwingst du der abgeleiteten Klasse eine statische Methode auf.



  • HumeSikkins schrieb:

    (aber bestimmt gibt es irgendwelche Coding-Tricks, mit denen du sowas über drei Verrenkungen und fünf Indirektionen simulieren kannst)

    Normalerweise reicht eine Indirektion, sprich eine virtuelle Funktion, die eine statische Funktion aufruft....

    Ich glaube, das hilft eher selten - meistens braucht man ja eine statische Funktion, weil mein kein Objekt in der Hand hat, weswegen man auch keine virtuelle Funktion rufen kann (die dann eine statische Funktion ruft)... 😉

    Gruß,

    Simon2.


Anmelden zum Antworten