Wie findet man den Index in der vtable heraus?



  • Hi,

    gibt es eine elegante Möglichkeit, den Index einer Funktion in der vtable herauszufinden. (Aus der Klassendeklaration ablesen ist nicht elegant 😉 )
    Bin mir gerade nicht sicher, in welches Forum das gehört.
    Am besten wäre es, wenn das schon zur Compilezeit möglich wäre.

    class foo
    {
        virtual bar();
    };
    
    int main()
    {
        int vtbl_idx_of_bar_in_foo = ???; // wie???
        return 0;
    }
    

    Also wenn jemand eine Antwort auf diese Frage kennt, dann bitte mitteilen.
    Danke für die Aufmerksamkeit.

    MfG
    DDR-RAM



  • OMG nein es gibt garkeine Möglichkeit, ausser "Hacks" die sich auf die ABI vom Compiler verlassen.
    Es muss ja nichtmal nen Vtable geben - der Compiler darf das ruhig auch anders implementieren wenn er mag.

    p.S.: wofür glaubst du das überhaupt zu brauchen?



  • hustbaer schrieb:

    OMG nein es gibt garkeine Möglichkeit, ausser "Hacks" die sich auf die ABI vom Compiler verlassen.
    Es muss ja nichtmal nen Vtable geben - der Compiler darf das ruhig auch anders implementieren wenn er mag.

    Dessen bin ich mir bewusst. Allerdings ist die Annahme, dass der Compiler eine Vtable verwendet in der Regel korrekt. Wie gesagt, ich war mir mit der Wahl des Forums auch nicht ganz zufrieden, da es sich nicht unbedingt um ISO C++ handeln muss. Ich verwende MS VC++ 2005.

    p.S.: wofür glaubst du das überhaupt zu brauchen?

    Ich will/muss mit der Vtable zur Laufzeit rumspielen. 😉
    Ich mach mir gerade Gedanken zur "dynamischen Vererbung" (ich hab das einfach mal sogenannt, eine Art Vererbung zur Laufzeit). Inwiefern meine Frage dazu im Endeffekt beantwortet werden muss, weiß ich noch nicht. Ich mach mir einfach mal weiter Gedanken.
    Bin für alle Anregungen offen.

    MfG
    DDR-RAM



  • DDR-RAM schrieb:

    Ich will/muss mit der Vtable zur Laufzeit rumspielen. 😉

    Dann sind virtuelle Funktionen womöglich nicht das Richtige für dich. Funktionszeiger bzw. Funktionsobjekte wären dann wohl eher das Mittel der Wahl.



  • Ok. Ich weiss aber auch speziell auf den MSVC 2005 bezogen keinen Weg. Lass lieber die Finger vom vTable, das wäre mir viel zu heikel. Vor allem so garnicht portabel. Du kannst ja ganz einfach Jump-Tables bzw. indirekte Sprünge verwenden, ein Array aus Function Pointers ist ja nicht gerade kompliziert.



  • http://www.codeproject.com/cpp/FastDelegate.asp erklärt wie das bei einzelnen Compilern so implementiert ist, sollte dir bei deinem Vorhaben behilflich sein.


Anmelden zum Antworten