bitte um Erläuterung zu virtuelle Methoden/Tabellen



  • Versuche grad unten stehenden Auzug aus dem Quelltext eines OpenCV Programms zu verstehen. Kann mir jemand sagen, was ich da sehe? Das "=" hinter der Funktionsdekl. ist mir völlig fremd.

    static CvCaptureVTable capture_vtable = 
    {
        6,
        (CvCaptureCloseFunc)icvClose,
        (CvCaptureGrabFrameFunc)icvGrabFrame,
        (CvCaptureRetrieveFrameFunc)icvRetrieveFrame,
        (CvCaptureGetPropertyFunc)icvGetProperty,
        (CvCaptureSetPropertyFunc)0,
        (CvCaptureGetDescriptionFunc)0
    };
    

    Die Ausdrücke hinter den geklammerten Ausdrücken sind Funktionen. Sind die geklammerten Ausdrücke als eine Art alternative Aufrufe der Funktionen zu verstehen?

    in einer anderen Methode wird es nochmal benutzt:

    cvCapture* cvCaptureFromIA( int index )
    //-----------------------------------------------------------------------------
    {
        CvCaptureIA* capture = (CvCaptureIA*)cvAlloc( sizeof(*capture));
        memset( capture, 0, sizeof(*capture));
        capture->vtable = &capture_vtable;
    ...
    

    Habe mal nach "vtable" gegoogelt, jedoch habe ich nichts gefunden was auf die Sache hier passen könnte. Für Hinweise wäre ich dankbar.



  • das ist eine ganz normale vtable die haendisch erstellt wurde.
    in C++ bekommt man das automatisch durch virtual funktionen aber in C muss man das eben haendisch machen.

    das was du bei google gefunden hast passt schon. nur wird hier eben alles haendisch gemacht...



  • könntest du kurz erläutern, wofür die virtuellen Funktionen da sind, und wie das ungefähr für den obigen Quelltext aussehen könnte?



  • Die Ausdrücke hinter den geklammerten Ausdrücken sind Funktionen. Sind die geklammerten Ausdrücke als eine Art alternative Aufrufe der Funktionen zu verstehen?

    Das, was in der Klammer steht, ist ein ganz normaler 'Cast', d.h. Typumwandlung.
    CvCaptureCloseFunc etc. ist ein 'typedef' für eine bestimmte Funktionsdeklaration (-prototyp).


Anmelden zum Antworten