void*

Dieses Thema im Forum "C/C++" wurde erstellt von ixs, 24.02.2012.

  1. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    Hi,
    ich bin auf einen netten Artikel gestoßen: http://www.mathematik.uni-ulm.de/sai/ws96/seminar/neher/node9.html, womit ich aber leider ein paar Verständnisprobleme habe.

    Code:
      /*         (class.d)        */
    
          #ifndef CLASS_D
          #define CLASS_D
          #include <stdarg.h>
          #include <stdio.h>
          
          struct CLASS {
            size_t size;
            void * (*constructor) (void * _self , const int argnr, va_list * _ap);
            void * (*destructor)  (void * _self);
            void * (*copy)        (const void * _self);
            void   (*cout)        (const void * _self);
          };
    
    Wie funktioniert hier der void Zeiger void * (*constructor)?

    Vielen Dank
    ixs
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 24.02.2012
    Zuletzt bearbeitet: 24.02.2012
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    das sind function pointer die einen void pointer zurueckliefern (bis auf cout). Function pointer sehen in C leider sehr unhandlich aus.

    Ich wollte grade ein kleines Beispiel fuer deinen Fall schreiben, hab dann aber gemerkt dass das sehr schnell sehr umfangreich wird. ;)
    Also verweise ich da lieber auf den Artikel und weitere C doku, ich will da jetzt nicht mehr als ne halbe Stunde dran sitzen um was halbwegs sinnvolles zu schreiben. ;)


    Edit:
    Hmm, na gut, ich kann dir trotzdem n kurzes Beispiel fuer function pointer geben, dafuer brauch ich ja dein CLASS Konstrukt nicht.

    Stell dir z.B. vor du brauchst aus irgendeinem Grund einen Callback in einer Funktion:

    Code:
    #include <stdio.h>
    
    void my_callback(int arg) {
      printf("Dude, I'm a callback and I got your argument: %d\n", arg);
    }
    
    void i_need_a_callback_badly(void (*callback)(int)) {
      callback(10);
    }
    
    int main() {
      i_need_a_callback_badly(my_callback);
      return 0;
    }
    
    Edit2:
    Jup, jetzt auch getestet, funzt wunderbar. ;)


    MfG,
    bytepool
     
  4. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    Hi,

    erst einmal, recht herzlichen Dank bytepool!
    Wo Du das jetzt so schreibst, sieht es echt einfach aus. Werde es gleich einmal gegen prüfen.
     
  5. #4 bytepool, 24.02.2012
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Gern geschehen. Das Prinzip ist nicht schwierig, nur die Syntax ist wie gesagt gewoehnungsbeduerftig. Der gleiche Code saehe in Python z.B. so aus, was dank dynamischer Typisierung angenehmer zu lesen ist:

    Code:
    def my_callback(arg):
        print "Dude, I'm a callback and I got your argument:", arg
    
    def i_need_a_callback_badly(callback):
        callback(10)
    
    i_need_a_callback_badly(my_callback)
    
    Die Implementierung von CPython's OO features ist uebrigens der in dem Artikel beschriebenen nicht unaehnlich. ;)
     
  6. ixs

    ixs Foren As

    Dabei seit:
    20.06.2008
    Beiträge:
    95
    Zustimmungen:
    0
    Schon lustig, was man alles mit void Zeigern anstellen kann.
     
Thema:

void*