void*

I

ixs

Foren As
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
 
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
 
Zuletzt bearbeitet:
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.
 
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. ;)
 
Schon lustig, was man alles mit void Zeigern anstellen kann.
 

Ähnliche Themen

sem_open - Problem mit Semaphoren

windows schneller als linux stdlib ...

g++ kompilieren schlägt fehl

Xubuntu - AVR32-linux crosscompile sqlite

Aus Datei lesen

Zurück
Oben